Don't force comment pagination.
[34561] instituted the policy of forcing pagination for comments. This strategy was intended to avert problems when 'page_comments' is set to 0 - as it is by default - and the number of comments on a given post rises into the hundreds or thousands. By forcing pagination in all cases, we ensured that WordPress would not time out by processing unwieldy numbers of comments on a given pageload. The strategy proves problematic, however, because comment permalinks are generated using the page of the comment. Forcing pagination for posts that were not previously paginated would change the URL of all comments that do not appear on the default comment page. This changeset reintroduces the 'page_comments' setting and its corresponding checkbox on Settings > Discussion. A number of tests, which were written after [34561], are modified to work now that 'page_comments' will, once again, be disabled by default. See #8071. git-svn-id: https://develop.svn.wordpress.org/trunk@35331 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
11bd47beca
commit
e4b72ad5ca
@ -482,6 +482,7 @@ function populate_options() {
|
||||
'close_comments_days_old' => 14,
|
||||
'thread_comments' => 1,
|
||||
'thread_comments_depth' => 5,
|
||||
'page_comments' => 0,
|
||||
'comments_per_page' => 50,
|
||||
'default_comments_page' => 'newest',
|
||||
'comment_order' => 'asc',
|
||||
@ -567,7 +568,7 @@ function populate_options() {
|
||||
'can_compress_scripts', 'page_uris', 'update_core', 'update_plugins', 'update_themes', 'doing_cron',
|
||||
'random_seed', 'rss_excerpt_length', 'secret', 'use_linksupdate', 'default_comment_status_page',
|
||||
'wporg_popular_tags', 'what_to_show', 'rss_language', 'language', 'enable_xmlrpc', 'enable_app',
|
||||
'embed_autourls', 'default_post_edit_rows', 'page_comments',
|
||||
'embed_autourls', 'default_post_edit_rows',
|
||||
);
|
||||
foreach ( $unusedoptions as $option )
|
||||
delete_option($option);
|
||||
|
@ -98,6 +98,8 @@ printf( __('Enable threaded (nested) comments %s levels deep'), $thread_comments
|
||||
|
||||
?></label>
|
||||
<br />
|
||||
<label for="page_comments">
|
||||
<input name="page_comments" type="checkbox" id="page_comments" value="1" <?php checked( '1', get_option( 'page_comments' ) ); ?> />
|
||||
<?php
|
||||
$default_comments_page = '</label><label for="default_comments_page"><select name="default_comments_page" id="default_comments_page"><option value="newest"';
|
||||
if ( 'newest' == get_option('default_comments_page') ) $default_comments_page .= ' selected="selected"';
|
||||
@ -105,7 +107,7 @@ $default_comments_page .= '>' . __('last') . '</option><option value="oldest"';
|
||||
if ( 'oldest' == get_option('default_comments_page') ) $default_comments_page .= ' selected="selected"';
|
||||
$default_comments_page .= '>' . __('first') . '</option></select>';
|
||||
|
||||
printf( __('Break comments into pages with %1$s top level comments per page and the %2$s page displayed by default'), '<label for="comments_per_page"><input name="comments_per_page" type="number" step="1" min="0" id="comments_per_page" value="' . esc_attr(get_option('comments_per_page')) . '" class="small-text" />', $default_comments_page );
|
||||
printf( __('Break comments into pages with %1$s top level comments per page and the %2$s page displayed by default'), '</label><label for="comments_per_page"><input name="comments_per_page" type="number" step="1" min="0" id="comments_per_page" value="' . esc_attr(get_option('comments_per_page')) . '" class="small-text" />', $default_comments_page );
|
||||
|
||||
?></label>
|
||||
<br />
|
||||
|
@ -83,7 +83,7 @@ if ( is_multisite() && ! is_super_admin() && 'update' != $action ) {
|
||||
|
||||
$whitelist_options = array(
|
||||
'general' => array( 'blogname', 'blogdescription', 'gmt_offset', 'date_format', 'time_format', 'start_of_week', 'timezone_string', 'WPLANG' ),
|
||||
'discussion' => array( 'default_pingback_flag', 'default_ping_status', 'default_comment_status', 'comments_notify', 'moderation_notify', 'comment_moderation', 'require_name_email', 'comment_whitelist', 'comment_max_links', 'moderation_keys', 'blacklist_keys', 'show_avatars', 'avatar_rating', 'avatar_default', 'close_comments_for_old_posts', 'close_comments_days_old', 'thread_comments', 'thread_comments_depth', 'comments_per_page', 'default_comments_page', 'comment_order', 'comment_registration' ),
|
||||
'discussion' => array( 'default_pingback_flag', 'default_ping_status', 'default_comment_status', 'comments_notify', 'moderation_notify', 'comment_moderation', 'require_name_email', 'comment_whitelist', 'comment_max_links', 'moderation_keys', 'blacklist_keys', 'show_avatars', 'avatar_rating', 'avatar_default', 'close_comments_for_old_posts', 'close_comments_days_old', 'thread_comments', 'thread_comments_depth', 'page_comments', 'comments_per_page', 'default_comments_page', 'comment_order', 'comment_registration' ),
|
||||
'media' => array( 'thumbnail_size_w', 'thumbnail_size_h', 'thumbnail_crop', 'medium_size_w', 'medium_size_h', 'large_size_w', 'large_size_h', 'image_default_size', 'image_default_align', 'image_default_link_type' ),
|
||||
'reading' => array( 'posts_per_page', 'posts_per_rss', 'rss_use_excerpt', 'show_on_front', 'page_on_front', 'page_for_posts', 'blog_public' ),
|
||||
'writing' => array( 'default_category', 'default_email_category', 'default_link_category', 'default_post_format' )
|
||||
|
@ -318,7 +318,10 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) {
|
||||
}
|
||||
}
|
||||
|
||||
if ( ( 'newest' == get_option('default_comments_page') && get_query_var('cpage') > 0 ) || ( 'newest' != get_option('default_comments_page') && get_query_var('cpage') > 1 ) ) {
|
||||
if ( get_option( 'page_comments' ) && (
|
||||
( 'newest' == get_option( 'default_comments_page' ) && get_query_var( 'cpage' ) > 0 ) ||
|
||||
( 'newest' != get_option( 'default_comments_page' ) && get_query_var( 'cpage' ) > 1 )
|
||||
) ) {
|
||||
$addl_path = ( !empty( $addl_path ) ? trailingslashit($addl_path) : '' ) . user_trailingslashit( $wp_rewrite->comments_pagination_base . '-' . get_query_var('cpage'), 'commentpaged' );
|
||||
$redirect['query'] = remove_query_arg( 'cpage', $redirect['query'] );
|
||||
}
|
||||
|
@ -807,6 +807,10 @@ function get_comment_pages_count( $comments = null, $per_page = null, $threaded
|
||||
if ( empty($comments) )
|
||||
return 0;
|
||||
|
||||
if ( ! get_option( 'page_comments' ) ) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( !isset($per_page) )
|
||||
$per_page = (int) get_query_var('comments_per_page');
|
||||
if ( 0 === $per_page )
|
||||
@ -860,12 +864,14 @@ function get_page_of_comment( $comment_ID, $args = array() ) {
|
||||
$original_args = $args;
|
||||
|
||||
// Order of precedence: 1. `$args['per_page']`, 2. 'comments_per_page' query_var, 3. 'comments_per_page' option.
|
||||
if ( '' === $args['per_page'] ) {
|
||||
$args['per_page'] = get_query_var( 'comments_per_page' );
|
||||
}
|
||||
if ( get_option( 'page_comments' ) ) {
|
||||
if ( '' === $args['per_page'] ) {
|
||||
$args['per_page'] = get_query_var( 'comments_per_page' );
|
||||
}
|
||||
|
||||
if ( '' === $args['per_page'] ) {
|
||||
$args['per_page'] = get_option( 'comments_per_page' );
|
||||
if ( '' === $args['per_page'] ) {
|
||||
$args['per_page'] = get_option( 'comments_per_page' );
|
||||
}
|
||||
}
|
||||
|
||||
if ( empty($args['per_page']) ) {
|
||||
|
@ -706,7 +706,7 @@ function get_comment_link( $comment = null, $args = array() ) {
|
||||
|
||||
// No 'cpage' is provided, so we calculate one.
|
||||
} else {
|
||||
if ( '' === $args['per_page'] ) {
|
||||
if ( '' === $args['per_page'] && get_option( 'page_comments' ) ) {
|
||||
$args['per_page'] = get_option('comments_per_page');
|
||||
}
|
||||
|
||||
@ -1268,6 +1268,7 @@ function comments_template( $file = '/comments.php', $separate_comments = false
|
||||
|
||||
$comment_args = array(
|
||||
'orderby' => 'comment_date_gmt',
|
||||
'order' => 'ASC',
|
||||
'status' => 'approve',
|
||||
'post_id' => $post->ID,
|
||||
'hierarchical' => 'threaded',
|
||||
@ -1281,30 +1282,32 @@ function comments_template( $file = '/comments.php', $separate_comments = false
|
||||
$comment_args['include_unapproved'] = array( $comment_author_email );
|
||||
}
|
||||
|
||||
$per_page = (int) get_query_var( 'comments_per_page' );
|
||||
if ( 0 === $per_page ) {
|
||||
$per_page = (int) get_option( 'comments_per_page' );
|
||||
}
|
||||
$per_page = 0;
|
||||
if ( get_option( 'page_comments' ) ) {
|
||||
$per_page = (int) get_query_var( 'comments_per_page' );
|
||||
if ( 0 === $per_page ) {
|
||||
$per_page = (int) get_option( 'comments_per_page' );
|
||||
}
|
||||
|
||||
$comment_args['order'] = 'ASC';
|
||||
$comment_args['number'] = $per_page;
|
||||
$page = (int) get_query_var( 'cpage' );
|
||||
$comment_args['number'] = $per_page;
|
||||
$page = (int) get_query_var( 'cpage' );
|
||||
|
||||
if ( $page ) {
|
||||
$comment_args['offset'] = ( $page - 1 ) * $per_page;
|
||||
} elseif ( 'oldest' === get_option( 'default_comments_page' ) ) {
|
||||
$comment_args['offset'] = 0;
|
||||
} else {
|
||||
// If fetching the first page of 'newest', we need a top-level comment count.
|
||||
$top_level_query = new WP_Comment_Query();
|
||||
$top_level_count = $top_level_query->query( array(
|
||||
'count' => true,
|
||||
'orderby' => false,
|
||||
'post_id' => $post->ID,
|
||||
'parent' => 0,
|
||||
) );
|
||||
if ( $page ) {
|
||||
$comment_args['offset'] = ( $page - 1 ) * $per_page;
|
||||
} elseif ( 'oldest' === get_option( 'default_comments_page' ) ) {
|
||||
$comment_args['offset'] = 0;
|
||||
} else {
|
||||
// If fetching the first page of 'newest', we need a top-level comment count.
|
||||
$top_level_query = new WP_Comment_Query();
|
||||
$top_level_count = $top_level_query->query( array(
|
||||
'count' => true,
|
||||
'orderby' => false,
|
||||
'post_id' => $post->ID,
|
||||
'parent' => 0,
|
||||
) );
|
||||
|
||||
$comment_args['offset'] = ( ceil( $top_level_count / $per_page ) - 1 ) * $per_page;
|
||||
$comment_args['offset'] = ( ceil( $top_level_count / $per_page ) - 1 ) * $per_page;
|
||||
}
|
||||
}
|
||||
|
||||
$comment_query = new WP_Comment_Query( $comment_args );
|
||||
@ -1345,7 +1348,7 @@ function comments_template( $file = '/comments.php', $separate_comments = false
|
||||
}
|
||||
|
||||
$overridden_cpage = false;
|
||||
if ( '' == get_query_var('cpage') ) {
|
||||
if ( '' == get_query_var( 'cpage' ) && $wp_query->max_num_comment_pages > 1 ) {
|
||||
set_query_var( 'cpage', 'newest' == get_option('default_comments_page') ? get_comment_pages_count() : 1 );
|
||||
$overridden_cpage = true;
|
||||
}
|
||||
@ -1941,8 +1944,9 @@ function wp_list_comments( $args = array(), $comments = null ) {
|
||||
}
|
||||
}
|
||||
|
||||
if ( '' === $r['per_page'] )
|
||||
if ( '' === $r['per_page'] && get_option( 'page_comments' ) ) {
|
||||
$r['per_page'] = get_query_var('comments_per_page');
|
||||
}
|
||||
|
||||
if ( empty($r['per_page']) ) {
|
||||
$r['per_page'] = 0;
|
||||
|
@ -329,9 +329,6 @@ add_filter( 'default_option_link_manager_enabled', '__return_true' );
|
||||
// This option no longer exists; tell plugins we always support auto-embedding.
|
||||
add_filter( 'default_option_embed_autourls', '__return_true' );
|
||||
|
||||
// This option no longer exists; tell plugins we want comment pagination.
|
||||
add_filter( 'pre_option_page_comments', '__return_true' );
|
||||
|
||||
// Default settings for heartbeat
|
||||
add_filter( 'heartbeat_settings', 'wp_heartbeat_settings' );
|
||||
|
||||
|
@ -11,7 +11,7 @@ $wp_version = '4.4-alpha-35088-src';
|
||||
*
|
||||
* @global int $wp_db_version
|
||||
*/
|
||||
$wp_db_version = 34978;
|
||||
$wp_db_version = 35329;
|
||||
|
||||
/**
|
||||
* Holds the TinyMCE version
|
||||
|
@ -166,6 +166,7 @@ class Tests_Comment_CommentsTemplate extends WP_UnitTestCase {
|
||||
|
||||
update_option( 'comment_order', 'asc' );
|
||||
update_option( 'default_comments_page', 'newest' );
|
||||
update_option( 'page_comments', '1' );
|
||||
|
||||
$link = add_query_arg( array(
|
||||
'cpage' => 2,
|
||||
@ -221,6 +222,7 @@ class Tests_Comment_CommentsTemplate extends WP_UnitTestCase {
|
||||
|
||||
update_option( 'comment_order', 'desc' );
|
||||
update_option( 'default_comments_page', 'newest' );
|
||||
update_option( 'page_comments', '1' );
|
||||
|
||||
$link = add_query_arg( array(
|
||||
'cpage' => 2,
|
||||
@ -266,6 +268,7 @@ class Tests_Comment_CommentsTemplate extends WP_UnitTestCase {
|
||||
|
||||
update_option( 'comment_order', 'asc' );
|
||||
update_option( 'default_comments_page', 'oldest' );
|
||||
update_option( 'page_comments', '1' );
|
||||
|
||||
$link = add_query_arg( array(
|
||||
'cpage' => 2,
|
||||
@ -311,6 +314,7 @@ class Tests_Comment_CommentsTemplate extends WP_UnitTestCase {
|
||||
|
||||
update_option( 'comment_order', 'desc' );
|
||||
update_option( 'default_comments_page', 'oldest' );
|
||||
update_option( 'page_comments', '1' );
|
||||
|
||||
$link = add_query_arg( array(
|
||||
'cpage' => 2,
|
||||
@ -353,6 +357,7 @@ class Tests_Comment_CommentsTemplate extends WP_UnitTestCase {
|
||||
|
||||
update_option( 'default_comments_page', 'newest' );
|
||||
update_option( 'comment_order', 'desc' );
|
||||
update_option( 'page_comments', '1' );
|
||||
|
||||
$link = add_query_arg( array(
|
||||
'cpage' => 1,
|
||||
@ -395,6 +400,7 @@ class Tests_Comment_CommentsTemplate extends WP_UnitTestCase {
|
||||
|
||||
update_option( 'default_comments_page', 'newest' );
|
||||
update_option( 'comment_order', 'desc' );
|
||||
update_option( 'page_comments', '1' );
|
||||
|
||||
$link = add_query_arg( array(
|
||||
'cpage' => 2,
|
||||
@ -440,6 +446,7 @@ class Tests_Comment_CommentsTemplate extends WP_UnitTestCase {
|
||||
|
||||
update_option( 'comment_order', 'desc' );
|
||||
update_option( 'default_comments_page', 'oldest' );
|
||||
update_option( 'page_comments', '1' );
|
||||
|
||||
$link_p1 = add_query_arg( array(
|
||||
'comments_per_page' => 2,
|
||||
@ -514,6 +521,7 @@ class Tests_Comment_CommentsTemplate extends WP_UnitTestCase {
|
||||
|
||||
update_option( 'comment_order', 'desc' );
|
||||
update_option( 'default_comments_page', 'newest' );
|
||||
update_option( 'page_comments', '1' );
|
||||
|
||||
$link_p0 = add_query_arg( array(
|
||||
'comments_per_page' => 2,
|
||||
|
@ -48,6 +48,7 @@ class Tests_Comment_GetCommentLink extends WP_UnitTestCase {
|
||||
* @ticket 34068
|
||||
*/
|
||||
public function test_default_comments_page_newest_default_page_should_have_cpage() {
|
||||
update_option( 'page_comments', 1 );
|
||||
update_option( 'default_comments_page', 'newest' );
|
||||
update_option( 'comments_per_page', 2 );
|
||||
|
||||
@ -60,6 +61,7 @@ class Tests_Comment_GetCommentLink extends WP_UnitTestCase {
|
||||
* @ticket 34068
|
||||
*/
|
||||
public function test_default_comments_page_newest_middle_page_should_have_cpage() {
|
||||
update_option( 'page_comments', 1 );
|
||||
update_option( 'default_comments_page', 'newest' );
|
||||
update_option( 'comments_per_page', 2 );
|
||||
|
||||
@ -72,6 +74,7 @@ class Tests_Comment_GetCommentLink extends WP_UnitTestCase {
|
||||
* @ticket 34068
|
||||
*/
|
||||
public function test_default_comments_page_newest_last_page_should_have_cpage() {
|
||||
update_option( 'page_comments', 1 );
|
||||
update_option( 'default_comments_page', 'newest' );
|
||||
update_option( 'comments_per_page', 2 );
|
||||
|
||||
@ -96,6 +99,7 @@ class Tests_Comment_GetCommentLink extends WP_UnitTestCase {
|
||||
* @ticket 34068
|
||||
*/
|
||||
public function test_default_comments_page_oldest_middle_page_should_have_cpage() {
|
||||
update_option( 'page_comments', 1 );
|
||||
update_option( 'default_comments_page', 'oldest' );
|
||||
update_option( 'comments_per_page', 2 );
|
||||
|
||||
@ -108,6 +112,7 @@ class Tests_Comment_GetCommentLink extends WP_UnitTestCase {
|
||||
* @ticket 34068
|
||||
*/
|
||||
public function test_default_comments_page_oldest_last_page_should_have_cpage() {
|
||||
update_option( 'page_comments', 1 );
|
||||
update_option( 'default_comments_page', 'oldest' );
|
||||
update_option( 'comments_per_page', 2 );
|
||||
|
||||
|
@ -233,6 +233,7 @@ class Tests_Comment_GetPageOfComment extends WP_UnitTestCase {
|
||||
$c2 = self::factory()->comment->create( array( 'comment_post_ID' => $p, 'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 20 ) ) );
|
||||
$c3 = self::factory()->comment->create( array( 'comment_post_ID' => $p, 'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 30 ) ) );
|
||||
|
||||
update_option( 'page_comments', 1 );
|
||||
update_option( 'comments_per_page', 2 );
|
||||
|
||||
$this->assertEquals( 2, get_page_of_comment( $c1 ) );
|
||||
|
Loading…
Reference in New Issue
Block a user