PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / trunk
Jetpack – WP Security, Backup, Speed, & Growth vtrunk
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
canonical-urls 5 months ago carousel 3 weeks ago comment-likes 9 months ago comments 4 days ago custom-post-types 2 months ago external-media 9 months ago google-fonts 2 months ago gravatar 6 years ago infinite-scroll 2 months ago likes 1 week ago markdown 3 months ago memberships 2 weeks ago photon-cdn 1 month ago plugin-search 3 months ago post-by-email 9 months ago related-posts 1 month ago scan 5 months ago seo-tools 1 week ago sharedaddy 1 week ago shortcodes 1 month ago shortlinks 2 months ago simple-payments 9 months ago site-icon 9 months ago sitemaps 1 week ago stats 8 months ago subscriptions 1 month ago theme-tools 3 weeks ago tiled-gallery 2 months ago verification-tools 3 months ago videopress 1 month ago widget-visibility 3 months ago widgets 2 weeks ago woocommerce-analytics 4 months ago wordads 2 months ago wpcom-tos 8 months ago account-protection.php 4 months ago ai.php 4 days ago blaze.php 9 months ago blocks.php 9 months ago canonical-urls.php 6 months ago carousel.php 9 months ago comment-likes.php 1 week ago comments.php 4 days ago contact-form.php 9 months ago copy-post.php 3 months ago custom-content-types.php 4 months ago google-fonts.php 4 months ago gravatar-hovercards.php 3 months ago infinite-scroll.php 9 months ago json-api.php 9 months ago latex.php 3 months ago likes.php 1 week ago markdown.php 9 months ago module-extras.php 3 weeks ago module-headings.php 4 days ago module-info.php 6 months ago monitor.php 2 months ago notes.php 1 month ago photon-cdn.php 9 months ago photon.php 9 months ago plugin-search.php 3 weeks ago podcast.php 1 month ago post-by-email.php 4 months ago post-list.php 9 months ago protect.php 4 months ago publicize.php 9 months ago related-posts.php 3 months ago search.php 9 months ago seo-tools.php 2 months ago sharedaddy.php 6 months ago shortcodes.php 9 months ago shortlinks.php 3 months ago simple-payments.php 9 months ago sitemaps.php 9 months ago sso.php 2 months ago stats.php 1 month ago subscriptions.php 1 month ago theme-tools.php 9 months ago tiled-gallery.php 9 months ago vaultpress.php 9 months ago verification-tools.php 4 months ago videopress.php 9 months ago waf.php 9 months ago widget-visibility.php 9 months ago widgets.php 9 months ago woocommerce-analytics.php 9 months ago wordads.php 9 months ago wpcom-reader.php 6 months ago wpgroho.js 1 year ago
shortlinks.php
196 lines
1 <?php
2 /**
3 * Module Name: WP.me Shortlinks
4 * Module Description: Share short, easy-to-remember links to your posts and pages.
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 if ( ! defined( 'ABSPATH' ) ) {
17 exit( 0 );
18 }
19
20 add_filter( 'pre_get_shortlink', 'wpme_get_shortlink_handler', 1, 4 );
21
22 if ( ! function_exists( 'wpme_dec2sixtwo' ) ) {
23 /**
24 * Converts number to base 62.
25 *
26 * @param int $num Number.
27 *
28 * @return string Value in base 62.
29 */
30 function wpme_dec2sixtwo( $num ) {
31 $index = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
32 $out = '';
33
34 if ( $num < 0 ) {
35 $out = '-';
36 $num = abs( $num );
37 }
38
39 for ( $t = floor( log10( $num ) / log10( 62 ) ); $t >= 0; $t-- ) {
40 $a = (int) floor( $num / pow( 62, $t ) );
41 $out .= substr( $index, $a, 1 );
42 $num -= $a * pow( 62, $t );
43 }
44
45 return $out;
46 }
47 }
48
49 /**
50 * Returns the WP.me shortlink.
51 *
52 * @param int $id Post ID, or 0 for the current post.
53 * @param string $context The context for the link. One of 'post' or 'query'.
54 * @param bool $allow_slugs Whether to allow post slugs in the shortlink.
55 *
56 * @return string
57 */
58 function wpme_get_shortlink( $id = 0, $context = 'post', $allow_slugs = true ) {
59 global $wp_query;
60
61 $blog_id = Jetpack_Options::get_option( 'id' );
62
63 if ( 'query' === $context ) {
64 if ( is_singular() ) {
65 $id = $wp_query->get_queried_object_id();
66 $context = 'post';
67 } elseif ( is_front_page() ) {
68 $context = 'blog';
69 } else {
70 return '';
71 }
72 }
73
74 if ( 'blog' === $context ) {
75 if ( empty( $id ) ) {
76 $id = $blog_id;
77 }
78
79 return 'https://wp.me/' . wpme_dec2sixtwo( $id );
80 }
81
82 $post = get_post( $id );
83
84 if ( empty( $post ) ) {
85 return '';
86 }
87
88 $post_id = $post->ID;
89 $type = '';
90
91 if ( $allow_slugs && 'publish' === $post->post_status && 'post' === $post->post_type && strlen( $post->post_name ) <= 8 && ! str_contains( $post->post_name, '%' )
92 && ! str_contains( $post->post_name, '-' ) ) {
93 $id = $post->post_name;
94 $type = 's';
95 } else {
96 $id = wpme_dec2sixtwo( $post_id );
97 if ( 'page' === $post->post_type ) {
98 $type = 'P';
99 } elseif ( 'post' === $post->post_type || post_type_supports( $post->post_type, 'shortlinks' ) ) {
100 $type = 'p';
101 } elseif ( 'attachment' === $post->post_type ) {
102 $type = 'a';
103 }
104 }
105
106 if ( empty( $type ) ) {
107 return '';
108 }
109
110 return 'https://wp.me/' . $type . wpme_dec2sixtwo( $blog_id ) . '-' . $id;
111 }
112
113 /**
114 * Get the shortlink handler.
115 *
116 * Used with the Core pre_get_shortlink hook.
117 *
118 * @param string $shortlink Shortlink value from the action. Ignored.
119 * @param int $id Post ID (0 for the current post).
120 * @param string $context The context for the link. One of 'post' or 'query'.
121 * @param bool $allow_slugs Whether to allow post slugs in the shortlink.
122 *
123 * @return string
124 */
125 function wpme_get_shortlink_handler( $shortlink, $id, $context, $allow_slugs ) {
126 return wpme_get_shortlink( $id, $context, $allow_slugs );
127 }
128
129 /**
130 * Add Shortlinks to the REST API responses.
131 *
132 * @since 6.9.0
133 *
134 * @action rest_api_init
135 * @uses register_rest_field, wpme_rest_get_shortlink
136 */
137 function wpme_rest_register_shortlinks() {
138 // Post types that support shortlinks by default.
139 $supported_post_types = array(
140 'attachment',
141 'page',
142 'post',
143 );
144
145 // Add any CPT that may have declared support for shortlinks.
146 foreach ( get_post_types() as $post_type ) {
147 if (
148 post_type_supports( $post_type, 'shortlinks' )
149 && post_type_supports( $post_type, 'editor' )
150 ) {
151 $supported_post_types[] = $post_type;
152 }
153 }
154
155 register_rest_field(
156 $supported_post_types,
157 'jetpack_shortlink',
158 array(
159 'get_callback' => 'wpme_rest_get_shortlink',
160 'update_callback' => null,
161 'schema' => null,
162 )
163 );
164 }
165
166 /**
167 * Get the shortlink of a post.
168 *
169 * @since 6.9.0
170 *
171 * @param array $object Details of current post.
172 *
173 * @uses wpme_get_shortlink
174 *
175 * @return string
176 */
177 function wpme_rest_get_shortlink( $object ) {
178 $object_id = $object['id'] ?? 0;
179 return wpme_get_shortlink( $object_id, array() );
180 }
181
182 // Add shortlinks to the REST API Post response.
183 add_action( 'rest_api_init', 'wpme_rest_register_shortlinks' );
184
185 /**
186 * Set the Shortlink Gutenberg extension as available.
187 */
188 function wpme_set_extension_available() {
189 Jetpack_Gutenberg::set_extension_available( 'shortlinks' );
190 }
191
192 add_action( 'init', 'wpme_set_extension_available' );
193
194 require_once __DIR__ . '/shortlinks/abilities/class-shortlinks-abilities.php';
195 \Automattic\Jetpack\Plugin\Abilities\Shortlinks_Abilities::init();
196