PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 10.5.3
Jetpack – WP Security, Backup, Speed, & Growth v10.5.3
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 All 500 releases
jetpack / modules / shortlinks.php
shortlinks.php
175 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 register_rest_field(
135 array(
136 'attachment',
137 'page',
138 'post',
139 ),
140 'jetpack_shortlink',
141 array(
142 'get_callback' => 'wpme_rest_get_shortlink',
143 'update_callback' => null,
144 'schema' => null,
145 )
146 );
147 }
148
149 /**
150 * Get the shortlink of a post.
151 *
152 * @since 6.9.0
153 *
154 * @param array $object Details of current post.
155 *
156 * @uses wpme_get_shortlink
157 *
158 * @return string
159 */
160 function wpme_rest_get_shortlink( $object ) {
161 return wpme_get_shortlink( $object['id'], array() );
162 }
163
164 // Add shortlinks to the REST API Post response.
165 add_action( 'rest_api_init', 'wpme_rest_register_shortlinks' );
166
167 /**
168 * Set the Shortlink Gutenberg extension as available.
169 */
170 function wpme_set_extension_available() {
171 Jetpack_Gutenberg::set_extension_available( 'jetpack/shortlinks' );
172 }
173
174 add_action( 'init', 'wpme_set_extension_available' );
175