PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.5.1
Jetpack – WP Security, Backup, Speed, & Growth v14.5.1
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 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
carousel 1 year ago cloudflare-analytics 2 years ago comment-likes 5 years ago comments 1 year ago custom-post-types 1 year ago external-media 1 year ago geo-location 1 year ago google-fonts 1 year ago gravatar 6 years ago infinite-scroll 1 year ago likes 1 year ago markdown 1 year ago memberships 1 year ago photon-cdn 1 year ago plugin-search 1 year ago post-by-email 1 year ago related-posts 1 year ago scan 1 year ago seo-tools 1 year ago sharedaddy 1 year ago shortcodes 1 year ago simple-payments 1 year ago site-icon 2 years ago sitemaps 1 year ago stats 2 years ago subscriptions 1 year ago theme-tools 1 year ago tiled-gallery 1 year ago verification-tools 4 years ago videopress 1 year ago widget-visibility 1 year ago widgets 1 year ago woocommerce-analytics 1 year ago wordads 1 year ago wpcom-tos 5 years ago account-protection.php 1 year ago blaze.php 2 years ago blocks.php 1 year ago carousel.php 2 years ago comment-likes.php 2 years ago comments.php 2 years ago contact-form.php 1 year ago copy-post.php 1 year ago custom-content-types.php 1 year ago geo-location.php 1 year ago google-fonts.php 2 years ago gravatar-hovercards.php 2 years ago infinite-scroll.php 3 years ago json-api.php 5 years ago latex.php 4 years ago likes.php 1 year ago markdown.php 4 years ago masterbar.php 1 year ago module-extras.php 1 year ago module-headings.php 1 year ago module-info.php 1 year ago monitor.php 2 years ago notes.php 1 year ago photon-cdn.php 1 year ago photon.php 3 years ago plugin-search.php 1 year ago post-by-email.php 5 years ago post-list.php 4 years ago protect.php 2 years ago publicize.php 1 year ago related-posts.php 2 years ago search.php 4 years ago seo-tools.php 2 years ago sharedaddy.php 2 years ago shortcodes.php 1 year ago shortlinks.php 1 year ago sitemaps.php 1 year ago sso.php 1 year ago stats.php 1 year ago subscriptions.php 1 year ago theme-tools.php 1 year ago tiled-gallery.php 4 years ago vaultpress.php 2 years ago verification-tools.php 5 years ago videopress.php 4 years ago waf.php 1 year ago widget-visibility.php 4 years ago widgets.php 1 year ago woocommerce-analytics.php 2 years ago wordads.php 2 years ago wpgroho.js 1 year ago
shortlinks.php
189 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 && ! str_contains( $post->post_name, '%' )
88 && ! str_contains( $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 $object_id = $object['id'] ?? 0;
175 return wpme_get_shortlink( $object_id, array() );
176 }
177
178 // Add shortlinks to the REST API Post response.
179 add_action( 'rest_api_init', 'wpme_rest_register_shortlinks' );
180
181 /**
182 * Set the Shortlink Gutenberg extension as available.
183 */
184 function wpme_set_extension_available() {
185 Jetpack_Gutenberg::set_extension_available( 'shortlinks' );
186 }
187
188 add_action( 'init', 'wpme_set_extension_available' );
189