PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 11.1.1
Jetpack – WP Security, Backup, Speed, & Growth v11.1.1
15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / shortlinks.php
jetpack / modules Last commit date
calypsoify 4 years ago carousel 4 years ago cloudflare-analytics 4 years ago comment-likes 5 years ago comments 4 years ago contact-form 3 years ago custom-css 4 years ago custom-post-types 4 years ago geo-location 4 years ago google-analytics 4 years ago gravatar 5 years ago infinite-scroll 4 years ago likes 4 years ago markdown 4 years ago masterbar 3 years ago memberships 3 years ago photon 5 years ago photon-cdn 3 years ago plugin-search 4 years ago post-by-email 4 years ago protect 4 years ago publicize 3 years ago related-posts 3 years ago scan 4 years ago seo-tools 3 years ago sharedaddy 3 years ago shortcodes 4 years ago simple-payments 3 years ago site-icon 4 years ago sitemaps 3 years ago sso 4 years ago stats 4 years ago subscriptions 4 years ago theme-tools 4 years ago tiled-gallery 3 years ago verification-tools 4 years ago videopress 3 years ago widget-visibility 3 years ago widgets 3 years ago woocommerce-analytics 4 years ago wordads 4 years ago wpcom-block-editor 4 years ago wpcom-tos 5 years ago carousel.php 4 years ago comment-likes.php 4 years ago comments.php 4 years ago contact-form.php 3 years ago copy-post.php 4 years ago custom-content-types.php 4 years ago custom-css.php 4 years ago enhanced-distribution.php 4 years ago geo-location.php 4 years ago google-analytics.php 4 years ago google-fonts.php 4 years ago gravatar-hovercards.php 4 years ago infinite-scroll.php 4 years ago json-api.php 5 years ago latex.php 4 years ago lazy-images.php 4 years ago likes.php 4 years ago markdown.php 4 years ago masterbar.php 4 years ago module-extras.php 4 years ago module-headings.php 4 years ago module-info.php 3 years ago monitor.php 4 years ago notes.php 4 years ago photon-cdn.php 4 years ago photon.php 4 years ago plugin-search.php 5 years ago post-by-email.php 5 years ago protect.php 4 years ago publicize.php 3 years ago related-posts.php 4 years ago search.php 4 years ago seo-tools.php 4 years ago sharedaddy.php 4 years ago shortcodes.php 4 years ago shortlinks.php 4 years ago sitemaps.php 4 years ago sso.php 4 years ago stats.php 4 years ago subscriptions.php 4 years ago theme-tools.php 4 years ago tiled-gallery.php 4 years ago vaultpress.php 4 years ago verification-tools.php 5 years ago videopress.php 4 years ago waf.php 4 years ago widget-visibility.php 4 years ago widgets.php 4 years ago woocommerce-analytics.php 5 years ago wordads.php 5 years ago wpgroho.js 5 years ago
shortlinks.php
188 lines
1 <?php
2 /**
3 * Module Name: WP.me Shortlinks
4 * Module Description: Generates shorter links using the wp.me domain.
5 * Sort Order: 8
6 * First Introduced: 1.1
7 * Requires Connection: Yes
8 * Auto Activate: No
9 * Module Tags: Social
10 * Feature: Writing
11 * Additional Search Queries: shortlinks, wp.me
12 *
13 * @package automattic/jetpack
14 */
15
16 add_filter( 'pre_get_shortlink', 'wpme_get_shortlink_handler', 1, 4 );
17
18 if ( ! function_exists( 'wpme_dec2sixtwo' ) ) {
19 /**
20 * Converts number to base 62.
21 *
22 * @param int $num Number.
23 *
24 * @return string Value in base 62.
25 */
26 function wpme_dec2sixtwo( $num ) {
27 $index = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
28 $out = '';
29
30 if ( $num < 0 ) {
31 $out = '-';
32 $num = abs( $num );
33 }
34
35 for ( $t = floor( log10( $num ) / log10( 62 ) ); $t >= 0; $t-- ) {
36 $a = floor( $num / pow( 62, $t ) );
37 $out = $out . substr( $index, $a, 1 );
38 $num = $num - ( $a * pow( 62, $t ) );
39 }
40
41 return $out;
42 }
43 }
44
45 /**
46 * Returns the WP.me shortlink.
47 *
48 * @param int $id Post ID, or 0 for the current post.
49 * @param string $context The context for the link. One of 'post' or 'query'.
50 * @param bool $allow_slugs Whether to allow post slugs in the shortlink.
51 *
52 * @return string
53 */
54 function wpme_get_shortlink( $id = 0, $context = 'post', $allow_slugs = true ) {
55 global $wp_query;
56
57 $blog_id = Jetpack_Options::get_option( 'id' );
58
59 if ( 'query' === $context ) {
60 if ( is_singular() ) {
61 $id = $wp_query->get_queried_object_id();
62 $context = 'post';
63 } elseif ( is_front_page() ) {
64 $context = 'blog';
65 } else {
66 return '';
67 }
68 }
69
70 if ( 'blog' === $context ) {
71 if ( empty( $id ) ) {
72 $id = $blog_id;
73 }
74
75 return 'https://wp.me/' . wpme_dec2sixtwo( $id );
76 }
77
78 $post = get_post( $id );
79
80 if ( empty( $post ) ) {
81 return '';
82 }
83
84 $post_id = $post->ID;
85 $type = '';
86
87 if ( $allow_slugs && 'publish' === $post->post_status && 'post' === $post->post_type && strlen( $post->post_name ) <= 8 && false === strpos( $post->post_name, '%' )
88 && false === strpos( $post->post_name, '-' ) ) {
89 $id = $post->post_name;
90 $type = 's';
91 } else {
92 $id = wpme_dec2sixtwo( $post_id );
93 if ( 'page' === $post->post_type ) {
94 $type = 'P';
95 } elseif ( 'post' === $post->post_type || post_type_supports( $post->post_type, 'shortlinks' ) ) {
96 $type = 'p';
97 } elseif ( 'attachment' === $post->post_type ) {
98 $type = 'a';
99 }
100 }
101
102 if ( empty( $type ) ) {
103 return '';
104 }
105
106 return 'https://wp.me/' . $type . wpme_dec2sixtwo( $blog_id ) . '-' . $id;
107 }
108
109 /**
110 * Get the shortlink handler.
111 *
112 * Used with the Core pre_get_shortlink hook.
113 *
114 * @param string $shortlink Shortlink value from the action. Ignored.
115 * @param int $id Post ID (0 for the current post).
116 * @param string $context The context for the link. One of 'post' or 'query'.
117 * @param bool $allow_slugs Whether to allow post slugs in the shortlink.
118 *
119 * @return string
120 */
121 function wpme_get_shortlink_handler( $shortlink, $id, $context, $allow_slugs ) {
122 return wpme_get_shortlink( $id, $context, $allow_slugs );
123 }
124
125 /**
126 * Add Shortlinks to the REST API responses.
127 *
128 * @since 6.9.0
129 *
130 * @action rest_api_init
131 * @uses register_rest_field, wpme_rest_get_shortlink
132 */
133 function wpme_rest_register_shortlinks() {
134 // Post types that support shortlinks by default.
135 $supported_post_types = array(
136 'attachment',
137 'page',
138 'post',
139 );
140
141 // Add any CPT that may have declared support for shortlinks.
142 foreach ( get_post_types() as $post_type ) {
143 if (
144 post_type_supports( $post_type, 'shortlinks' )
145 && post_type_supports( $post_type, 'editor' )
146 ) {
147 $supported_post_types[] = $post_type;
148 }
149 }
150
151 register_rest_field(
152 $supported_post_types,
153 'jetpack_shortlink',
154 array(
155 'get_callback' => 'wpme_rest_get_shortlink',
156 'update_callback' => null,
157 'schema' => null,
158 )
159 );
160 }
161
162 /**
163 * Get the shortlink of a post.
164 *
165 * @since 6.9.0
166 *
167 * @param array $object Details of current post.
168 *
169 * @uses wpme_get_shortlink
170 *
171 * @return string
172 */
173 function wpme_rest_get_shortlink( $object ) {
174 return wpme_get_shortlink( $object['id'], array() );
175 }
176
177 // Add shortlinks to the REST API Post response.
178 add_action( 'rest_api_init', 'wpme_rest_register_shortlinks' );
179
180 /**
181 * Set the Shortlink Gutenberg extension as available.
182 */
183 function wpme_set_extension_available() {
184 Jetpack_Gutenberg::set_extension_available( 'jetpack/shortlinks' );
185 }
186
187 add_action( 'init', 'wpme_set_extension_available' );
188