PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta
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 / canonical-urls / class-jetpack-canonical-urls-resolver.php
jetpack / modules / canonical-urls Last commit date
class-jetpack-canonical-urls-resolver.php 5 months ago
class-jetpack-canonical-urls-resolver.php
116 lines
1 <?php
2 /**
3 * URL resolution logic for the Canonical URLs module.
4 *
5 * @package automattic/jetpack
6 */
7
8 /**
9 * Resolves canonical URLs for different archive page types.
10 *
11 * URLs are built from scratch using WordPress API functions (get_permalink,
12 * get_term_link, etc.) rather than parsing the current request URL, so they
13 * are inherently clean — no sorting, filtering, or tracking parameters.
14 */
15 class Jetpack_Canonical_Urls_Resolver {
16
17 /**
18 * Get the canonical URL for the current page.
19 *
20 * Routes to the correct URL based on the current query conditionals.
21 *
22 * @since 15.6
23 *
24 * @return string The canonical URL, or empty string if none should be output.
25 */
26 public static function get_canonical_url() {
27 $url = '';
28
29 if ( is_front_page() && is_home() ) {
30 // Default homepage (latest posts).
31 $url = home_url( '/' );
32 } elseif ( is_front_page() ) {
33 // Static front page.
34 $url = home_url( '/' );
35 } elseif ( is_home() ) {
36 // Blog page (when a static front page is set).
37 $blog_page_id = (int) get_option( 'page_for_posts' );
38 if ( $blog_page_id ) {
39 $url = get_permalink( $blog_page_id );
40 }
41 } elseif ( function_exists( 'is_shop' ) && is_shop() ) {
42 // WooCommerce shop page.
43 $shop_page_id = (int) get_option( 'woocommerce_shop_page_id' );
44 if ( $shop_page_id ) {
45 $url = get_permalink( $shop_page_id );
46 }
47 } elseif ( is_category() || is_tag() || is_tax() ) {
48 $term = get_queried_object();
49 if ( $term instanceof WP_Term ) {
50 $url = get_term_link( $term );
51 if ( is_wp_error( $url ) ) {
52 $url = '';
53 }
54 }
55 } elseif ( is_post_type_archive() ) {
56 $url = get_post_type_archive_link( get_query_var( 'post_type' ) );
57 if ( false === $url ) {
58 $url = '';
59 }
60 } elseif ( is_author() ) {
61 $author_id = (int) get_query_var( 'author' );
62 if ( $author_id ) {
63 $url = get_author_posts_url( $author_id );
64 }
65 } elseif ( is_year() ) {
66 $url = get_year_link( get_query_var( 'year' ) );
67 } elseif ( is_month() ) {
68 $url = get_month_link( get_query_var( 'year' ), get_query_var( 'monthnum' ) );
69 } elseif ( is_day() ) {
70 $url = get_day_link( get_query_var( 'year' ), get_query_var( 'monthnum' ), get_query_var( 'day' ) );
71 }
72 // is_search() and is_404() intentionally return empty string (no canonical).
73
74 if ( ! empty( $url ) ) {
75 $url = self::apply_pagination( $url );
76 }
77
78 /**
79 * Filter the canonical URL before output.
80 *
81 * @module canonical-urls
82 *
83 * @since 15.6
84 *
85 * @param string $url The canonical URL for the current page.
86 */
87 return apply_filters( 'jetpack_canonical_url', $url );
88 }
89
90 /**
91 * Append pagination to the canonical URL for paged views.
92 *
93 * @since 15.6
94 *
95 * @param string $url The base canonical URL.
96 * @return string The URL with pagination appended if applicable.
97 */
98 private static function apply_pagination( $url ) {
99 $paged = get_query_var( 'paged', 0 );
100
101 if ( $paged < 2 ) {
102 return $url;
103 }
104
105 global $wp_rewrite;
106
107 if ( $wp_rewrite->using_permalinks() && false === strpos( $url, '?' ) ) {
108 $url = user_trailingslashit( trailingslashit( $url ) . $wp_rewrite->pagination_base . '/' . $paged );
109 } else {
110 $url = add_query_arg( 'paged', $paged, $url );
111 }
112
113 return $url;
114 }
115 }
116