如何使用 paginate_link() 解决 bbpress 插件分页问题
How do I solve bbpress plugin pagination problem using paginate_link()
因为我在创建分页时遇到了困难。我探索了这种直接在插件中添加\includes\forums\template.php的方法。
function bbp_has_forums( $args = array() ) {
// Forum archive only shows root
if ( bbp_is_forum_archive() ) {
$default_post_parent = 0;
// User subscriptions shows any
} elseif ( bbp_is_subscriptions() ) {
$default_post_parent = 'any';
// Could be anything, so look for possible parent ID
} else {
$default_post_parent = bbp_get_forum_id();
}
$default_forum_search = bbp_sanitize_search_request( 'fs' );
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
// Default argument array
$default = array(
'post_type' => bbp_get_forum_post_type(),
'post_parent' => $default_post_parent,
'post_status' => bbp_get_public_status_id(),
'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ),
'orderby' => 'menu_order title',
'order' => 'ASC',
'no_found_rows' => true,
'ignore_sticky_posts' => true,
'posts_per_page' => 7,
'paged' => $paged, // page number is defined here.
// Conditionally prime the cache for last active posts
'update_post_family_cache' => true
);
// Only add 's' arg if searching for forums
// See https://bbpress.trac.wordpress.org/ticket/2607
if ( ! empty( $default_forum_search ) ) {
$default['s'] = $default_forum_search;
}
// Parse arguments with default forum query for most circumstances
$r = bbp_parse_args( $args, $default, 'has_forums' );
// Run the query
$bbp = bbpress();
$bbp->forum_query = new WP_Query( $r );
// Maybe prime last active posts
if ( ! empty( $r['update_post_family_cache'] ) ) {
bbp_update_post_family_caches( $bbp->forum_query->posts );
}
$big = 999999999; // need an unlikely integer
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $bbp->forum_query->max_num_pages
));
// Filter & return
return apply_filters( 'bbp_has_forums', $bbp->forum_query->have_posts(), $bbp->forum_query );
}
这不在子主题的 function.php 中,因为这是我唯一可以这样做的地方,以便能够在任何我想显示它的地方使用 paginate_links() 。还是我遗漏了什么?
在archive-forum中,我做了这样的事情。
<div class="col-xs-12 col-sm-12 col-md-8 col-lg-8" id="forum_index">
<?php
set_query_var('table_title', __translate( 'Discussion Groups', 'bbpress' ));
bbp_get_template_part( 'content', 'archive-forum' );
?>
<div class="forum_pagination font-weight-bold">
<?php echo paginate_links(); ?>
</div>
</div>
调用是一个重复,尽管它通过输出分页来工作,但仅在默认情况下,即下一个 1,2 或上一个 1,2,如果我有更多页面,我无法获得 paginate_links();在 archive-forum 中定义接受页码。
您采取了正确的步骤;您需要在您的子模板中使用 function.php 来完成它以强制 posts_per_page.
将此放入您的 function.php
function modify_forum_query($query) {
$query->set('posts_per_page', 7);
}
add_action('pre_get_posts', 'modify_forum_query');
在这里你也可以随心所欲
<div class="col-xs-12 col-sm-12 col-md-8 col-lg-8" id="forum_index">
<?php
set_query_var('table_title', __translate( 'Discussion Groups', 'bbpress' ));
bbp_get_template_part( 'content', 'archive-forum' );
?>
<div class="forum_pagination font-weight-bold">
<?php echo paginate_links(); ?>
</div>
</div>
在您的 echo paginate_links();
中,您可以使用参数数组来覆盖默认值。
因为我在创建分页时遇到了困难。我探索了这种直接在插件中添加\includes\forums\template.php的方法。
function bbp_has_forums( $args = array() ) {
// Forum archive only shows root
if ( bbp_is_forum_archive() ) {
$default_post_parent = 0;
// User subscriptions shows any
} elseif ( bbp_is_subscriptions() ) {
$default_post_parent = 'any';
// Could be anything, so look for possible parent ID
} else {
$default_post_parent = bbp_get_forum_id();
}
$default_forum_search = bbp_sanitize_search_request( 'fs' );
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
// Default argument array
$default = array(
'post_type' => bbp_get_forum_post_type(),
'post_parent' => $default_post_parent,
'post_status' => bbp_get_public_status_id(),
'posts_per_page' => get_option( '_bbp_forums_per_page', 50 ),
'orderby' => 'menu_order title',
'order' => 'ASC',
'no_found_rows' => true,
'ignore_sticky_posts' => true,
'posts_per_page' => 7,
'paged' => $paged, // page number is defined here.
// Conditionally prime the cache for last active posts
'update_post_family_cache' => true
);
// Only add 's' arg if searching for forums
// See https://bbpress.trac.wordpress.org/ticket/2607
if ( ! empty( $default_forum_search ) ) {
$default['s'] = $default_forum_search;
}
// Parse arguments with default forum query for most circumstances
$r = bbp_parse_args( $args, $default, 'has_forums' );
// Run the query
$bbp = bbpress();
$bbp->forum_query = new WP_Query( $r );
// Maybe prime last active posts
if ( ! empty( $r['update_post_family_cache'] ) ) {
bbp_update_post_family_caches( $bbp->forum_query->posts );
}
$big = 999999999; // need an unlikely integer
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $bbp->forum_query->max_num_pages
));
// Filter & return
return apply_filters( 'bbp_has_forums', $bbp->forum_query->have_posts(), $bbp->forum_query );
}
这不在子主题的 function.php 中,因为这是我唯一可以这样做的地方,以便能够在任何我想显示它的地方使用 paginate_links() 。还是我遗漏了什么?
在archive-forum中,我做了这样的事情。
<div class="col-xs-12 col-sm-12 col-md-8 col-lg-8" id="forum_index">
<?php
set_query_var('table_title', __translate( 'Discussion Groups', 'bbpress' ));
bbp_get_template_part( 'content', 'archive-forum' );
?>
<div class="forum_pagination font-weight-bold">
<?php echo paginate_links(); ?>
</div>
</div>
调用是一个重复,尽管它通过输出分页来工作,但仅在默认情况下,即下一个 1,2 或上一个 1,2,如果我有更多页面,我无法获得 paginate_links();在 archive-forum 中定义接受页码。
您采取了正确的步骤;您需要在您的子模板中使用 function.php 来完成它以强制 posts_per_page.
将此放入您的 function.php
function modify_forum_query($query) {
$query->set('posts_per_page', 7);
}
add_action('pre_get_posts', 'modify_forum_query');
在这里你也可以随心所欲
<div class="col-xs-12 col-sm-12 col-md-8 col-lg-8" id="forum_index">
<?php
set_query_var('table_title', __translate( 'Discussion Groups', 'bbpress' ));
bbp_get_template_part( 'content', 'archive-forum' );
?>
<div class="forum_pagination font-weight-bold">
<?php echo paginate_links(); ?>
</div>
</div>
在您的 echo paginate_links();
中,您可以使用参数数组来覆盖默认值。