mirror of
git://develop.git.wordpress.org/
synced 2025-01-17 12:58:25 +01:00
Canonical: Redirect paged requests for non-paginated posts to the post permalink.
This avoids displaying duplicate content of the same post under different URLs and ensures the canonical URL is correct. Previously, requests for invalid page numbers were only redirected to the post permalink if the post was actually paginated using the `<!--nextpage-->` marker. Follow-up to [34492]. Props jeremyfelt, prografika, sachit.tandukar, subrataemfluence, hronak, ekatherine, henry.wright, chesio, dd32, SergeyBiryukov. Fixes #40773. See #45337, #28081, #11694. git-svn-id: https://develop.svn.wordpress.org/trunk@47727 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
be8b8baec9
commit
af596bcc5b
@ -157,8 +157,7 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) {
|
||||
}
|
||||
}
|
||||
|
||||
if ( get_query_var( 'page' ) && $wp_query->post &&
|
||||
false !== strpos( $wp_query->post->post_content, '<!--nextpage-->' ) ) {
|
||||
if ( get_query_var( 'page' ) && $wp_query->post ) {
|
||||
$redirect['path'] = rtrim( $redirect['path'], (int) get_query_var( 'page' ) . '/' );
|
||||
$redirect['query'] = remove_query_arg( 'page', $redirect['query'] );
|
||||
$redirect_url = get_permalink( $wp_query->post->ID );
|
||||
|
@ -678,9 +678,14 @@ class WP {
|
||||
|
||||
// Check for paged content that exceeds the max number of pages.
|
||||
$next = '<!--nextpage-->';
|
||||
if ( $p && false !== strpos( $p->post_content, $next ) && ! empty( $this->query_vars['page'] ) ) {
|
||||
$page = trim( $this->query_vars['page'], '/' );
|
||||
$success = (int) $page <= ( substr_count( $p->post_content, $next ) + 1 );
|
||||
if ( $p && ! empty( $this->query_vars['page'] ) ) {
|
||||
// Check if content is actually intended to be paged.
|
||||
if ( false !== strpos( $p->post_content, $next ) ) {
|
||||
$page = trim( $this->query_vars['page'], '/' );
|
||||
$success = (int) $page <= ( substr_count( $p->post_content, $next ) + 1 );
|
||||
} else {
|
||||
$success = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -175,6 +175,9 @@ class Tests_Canonical extends WP_Canonical_UnitTestCase {
|
||||
array( '/2008/09/03/images-test/?page=3', '/2008/09/03/images-test/3/' ),
|
||||
array( '/2008/09/03/images-te?page=3', '/2008/09/03/images-test/3/' ),
|
||||
|
||||
array( '/2008/03/03/comment-test/3/', '/2008/03/03/comment-test/' ),
|
||||
array( '/2008/03/03/comment-test/?page=3', '/2008/03/03/comment-test/' ),
|
||||
|
||||
// Comments.
|
||||
array( '/2008/03/03/comment-test/?cpage=2', '/2008/03/03/comment-test/comment-page-2/' ),
|
||||
|
||||
|
@ -11,7 +11,8 @@ class Tests_WpGetCanonicalURL extends WP_UnitTestCase {
|
||||
public static function wpSetUpBeforeClass( $factory ) {
|
||||
self::$post_id = $factory->post->create(
|
||||
array(
|
||||
'post_status' => 'publish',
|
||||
'post_content' => 'Page 1 <!--nextpage--> Page 2 <!--nextpage--> Page 3',
|
||||
'post_status' => 'publish',
|
||||
)
|
||||
);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user