<?php /** * Module Name: WP.me Shortlinks * Module Description: Generates shorter links using the wp.me domain. * Sort Order: 8 * First Introduced: 1.1 * Requires Connection: Yes * Auto Activate: No * Module Tags: Social * Feature: Writing * Additional Search Queries: shortlinks, wp.me * * @package automattic/jetpack */ add_filter( 'pre_get_shortlink', 'wpme_get_shortlink_handler', 1, 4 ); if ( ! function_exists( 'wpme_dec2sixtwo' ) ) { /** * Converts number to base 62. * * @param int $num Number. * * @return string Value in base 62. */ function wpme_dec2sixtwo( $num ) { $index = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $out = ''; if ( $num < 0 ) { $out = '-'; $num = abs( $num ); } for ( $t = floor( log10( $num ) / log10( 62 ) ); $t >= 0; $t-- ) { $a = floor( $num / pow( 62, $t ) ); $out = $out . substr( $index, $a, 1 ); $num = $num - ( $a * pow( 62, $t ) ); } return $out; } } /** * Returns the WP.me shortlink. * * @param int $id Post ID, or 0 for the current post. * @param string $context The context for the link. One of 'post' or 'query'. * @param bool $allow_slugs Whether to allow post slugs in the shortlink. * * @return string */ function wpme_get_shortlink( $id = 0, $context = 'post', $allow_slugs = true ) { global $wp_query; $blog_id = Jetpack_Options::get_option( 'id' ); if ( 'query' === $context ) { if ( is_singular() ) { $id = $wp_query->get_queried_object_id(); $context = 'post'; } elseif ( is_front_page() ) { $context = 'blog'; } else { return ''; } } if ( 'blog' === $context ) { if ( empty( $id ) ) { $id = $blog_id; } return 'https://wp.me/' . wpme_dec2sixtwo( $id ); } $post = get_post( $id ); if ( empty( $post ) ) { return ''; } $post_id = $post->ID; $type = ''; if ( $allow_slugs && 'publish' === $post->post_status && 'post' === $post->post_type && strlen( $post->post_name ) <= 8 && ! str_contains( $post->post_name, '%' ) && ! str_contains( $post->post_name, '-' ) ) { $id = $post->post_name; $type = 's'; } else { $id = wpme_dec2sixtwo( $post_id ); if ( 'page' === $post->post_type ) { $type = 'P'; } elseif ( 'post' === $post->post_type || post_type_supports( $post->post_type, 'shortlinks' ) ) { $type = 'p'; } elseif ( 'attachment' === $post->post_type ) { $type = 'a'; } } if ( empty( $type ) ) { return ''; } return 'https://wp.me/' . $type . wpme_dec2sixtwo( $blog_id ) . '-' . $id; } /** * Get the shortlink handler. * * Used with the Core pre_get_shortlink hook. * * @param string $shortlink Shortlink value from the action. Ignored. * @param int $id Post ID (0 for the current post). * @param string $context The context for the link. One of 'post' or 'query'. * @param bool $allow_slugs Whether to allow post slugs in the shortlink. * * @return string */ function wpme_get_shortlink_handler( $shortlink, $id, $context, $allow_slugs ) { return wpme_get_shortlink( $id, $context, $allow_slugs ); } /** * Add Shortlinks to the REST API responses. * * @since 6.9.0 * * @action rest_api_init * @uses register_rest_field, wpme_rest_get_shortlink */ function wpme_rest_register_shortlinks() { // Post types that support shortlinks by default. $supported_post_types = array( 'attachment', 'page', 'post', ); // Add any CPT that may have declared support for shortlinks. foreach ( get_post_types() as $post_type ) { if ( post_type_supports( $post_type, 'shortlinks' ) && post_type_supports( $post_type, 'editor' ) ) { $supported_post_types[] = $post_type; } } register_rest_field( $supported_post_types, 'jetpack_shortlink', array( 'get_callback' => 'wpme_rest_get_shortlink', 'update_callback' => null, 'schema' => null, ) ); } /** * Get the shortlink of a post. * * @since 6.9.0 * * @param array $object Details of current post. * * @uses wpme_get_shortlink * * @return string */ function wpme_rest_get_shortlink( $object ) { return wpme_get_shortlink( $object['id'], array() ); } // Add shortlinks to the REST API Post response. add_action( 'rest_api_init', 'wpme_rest_register_shortlinks' ); /** * Set the Shortlink Gutenberg extension as available. */ function wpme_set_extension_available() { Jetpack_Gutenberg::set_extension_available( 'jetpack/shortlinks' ); } add_action( 'init', 'wpme_set_extension_available' );
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
calypsoify | Folder | 0755 |
|
|
carousel | Folder | 0755 |
|
|
cloudflare-analytics | Folder | 0755 |
|
|
comment-likes | Folder | 0755 |
|
|
comments | Folder | 0755 |
|
|
contact-form | Folder | 0755 |
|
|
custom-css | Folder | 0755 |
|
|
custom-post-types | Folder | 0755 |
|
|
geo-location | Folder | 0755 |
|
|
google-analytics | Folder | 0755 |
|
|
google-fonts | Folder | 0755 |
|
|
gravatar | Folder | 0755 |
|
|
infinite-scroll | Folder | 0755 |
|
|
likes | Folder | 0755 |
|
|
markdown | Folder | 0755 |
|
|
masterbar | Folder | 0755 |
|
|
memberships | Folder | 0755 |
|
|
photon-cdn | Folder | 0755 |
|
|
plugin-search | Folder | 0755 |
|
|
post-by-email | Folder | 0755 |
|
|
related-posts | Folder | 0755 |
|
|
scan | Folder | 0755 |
|
|
seo-tools | Folder | 0755 |
|
|
sharedaddy | Folder | 0755 |
|
|
shortcodes | Folder | 0755 |
|
|
simple-payments | Folder | 0755 |
|
|
site-icon | Folder | 0755 |
|
|
sitemaps | Folder | 0755 |
|
|
sso | Folder | 0755 |
|
|
stats | Folder | 0755 |
|
|
subscriptions | Folder | 0755 |
|
|
theme-tools | Folder | 0755 |
|
|
tiled-gallery | Folder | 0755 |
|
|
verification-tools | Folder | 0755 |
|
|
videopress | Folder | 0755 |
|
|
widget-visibility | Folder | 0755 |
|
|
widgets | Folder | 0755 |
|
|
woocommerce-analytics | Folder | 0755 |
|
|
wordads | Folder | 0755 |
|
|
wpcom-block-editor | Folder | 0755 |
|
|
wpcom-tos | Folder | 0755 |
|
|
action-bar.php | File | 644 B | 0644 |
|
blaze.php | File | 419 B | 0644 |
|
carousel.php | File | 573 B | 0644 |
|
comment-likes.php | File | 8.03 KB | 0644 |
|
comments.php | File | 1.06 KB | 0644 |
|
contact-form.php | File | 7.47 KB | 0644 |
|
copy-post.php | File | 12.27 KB | 0644 |
|
custom-content-types.php | File | 1.53 KB | 0644 |
|
custom-css.php | File | 1.37 KB | 0644 |
|
enhanced-distribution.php | File | 2.4 KB | 0644 |
|
geo-location.php | File | 2.44 KB | 0644 |
|
google-analytics.php | File | 501 B | 0644 |
|
google-fonts.php | File | 533 B | 0644 |
|
gravatar-hovercards.php | File | 11.8 KB | 0644 |
|
infinite-scroll.php | File | 8.19 KB | 0644 |
|
json-api.php | File | 484 B | 0644 |
|
latex.php | File | 4.61 KB | 0644 |
|
lazy-images.php | File | 955 B | 0644 |
|
likes.php | File | 21.59 KB | 0644 |
|
markdown.php | File | 1007 B | 0644 |
|
masterbar.php | File | 1.56 KB | 0644 |
|
module-extras.php | File | 2.93 KB | 0644 |
|
module-headings.php | File | 46.17 KB | 0644 |
|
module-info.php | File | 27.93 KB | 0644 |
|
monitor.php | File | 3.51 KB | 0644 |
|
notes.php | File | 7.6 KB | 0644 |
|
photon-cdn.php | File | 12.17 KB | 0644 |
|
photon.php | File | 711 B | 0644 |
|
plugin-search.php | File | 20.06 KB | 0644 |
|
post-by-email.php | File | 596 B | 0644 |
|
post-list.php | File | 533 B | 0644 |
|
protect.php | File | 694 B | 0644 |
|
publicize.php | File | 4.24 KB | 0644 |
|
related-posts.php | File | 2.14 KB | 0644 |
|
search.php | File | 1.17 KB | 0644 |
|
seo-tools.php | File | 1.52 KB | 0644 |
|
sharedaddy.php | File | 1.6 KB | 0644 |
|
shortcodes.php | File | 6.06 KB | 0644 |
|
shortlinks.php | File | 4.37 KB | 0644 |
|
sitemaps.php | File | 1.28 KB | 0644 |
|
sso.php | File | 40.16 KB | 0644 |
|
stats.php | File | 50.88 KB | 0644 |
|
subscriptions.php | File | 35.02 KB | 0644 |
|
theme-tools.php | File | 2.52 KB | 0644 |
|
tiled-gallery.php | File | 1.05 KB | 0644 |
|
vaultpress.php | File | 1.77 KB | 0644 |
|
verification-tools.php | File | 830 B | 0644 |
|
videopress.php | File | 1007 B | 0644 |
|
waf.php | File | 297 B | 0644 |
|
widget-visibility.php | File | 475 B | 0644 |
|
widgets.php | File | 2.86 KB | 0644 |
|
woocommerce-analytics.php | File | 631 B | 0644 |
|
wordads.php | File | 586 B | 0644 |
|
wpgroho.js | File | 1.91 KB | 0644 |
|