情境我正在尝试了解在使用分页钩时循环出错的地方。我使用的是Understrap主题,与Understrap-child一起使用,并且我未对可在here中找到的预构建钩子进行任何编辑。我在下面列出的循环中使用了此挂钩,该循环位于页面模板文件中。但是没有输出分页钩?但是,循环的其余部分工作正常。这是关键,我在index.php文件中使用了完全相同的结构。并且它完全可以正常工作。这使我相信我可能需要声明一些内容,只是不确定该声明什么。题我想知道是否在使用页面模板时,new WP_Query();是否需要声明任何全局变量才能使$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;工作?有问题的代码 作为参考,我已经包含了我的循环,尽管我很确定它是可以的。<div class="bg-light"> <div class="container space-top-3 space-bottom-2"> <div class="row"> <?php $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; $args = array( 'post_type' => 'post', 'orderby' => 'post_date', 'order' => 'desc', 'perm' => 'readable', 'show_post_views' => true, 'posts_per_page' => 9, 'paged' => $paged ); $latestArticles = new WP_Query( $args ); if( $latestArticles->have_posts() ): /* Start the Loop */ while( $latestArticles->have_posts() ) : $latestArticles->the_post(); get_template_part( 'loop-templates/content-search', get_post_format() ); endwhile; endif;?> </div> <div class="row mt-3"> <div class="col-auto"> <!-- The pagination component (currently not being output. not sure why.) --> <?php understrap_pagination(); ?> </div> </div> <?php wp_reset_query(); ?> <?php else : ?> <!-- do nothing --> <?php endif; ?> </div></div>预先感谢所有帮助。编辑7/11/19:尝试将$latestArticles->max_num_pages这样的understrap_pagination();传递给understrap_pagination($latestArticles->max_num_pages);。 -还是没有运气。 :| 最佳答案 分页功能依赖于$wp_query->max_num_pages(即主查询的最大页面数),因此该功能不适用于自定义查询:function understrap_pagination( $args = array(), $class = 'pagination' ) { if ( $GLOBALS['wp_query']->max_num_pages <= 1 ) { return; } ...}尽管您的方法确实有效,但是更改全局$wp_query对象实际上不是一个好主意,因为这样做与使用query_posts()本质上是相同的,根本不建议这样做-您可以通过检查docs 。但是,如果您不想编辑分页功能(或创建自己的分页功能),则通过临时更改—且仅更改— $wp_query->max_num_pages来使分页适用于您的自定义查询的风险较小的解决方法:$orig_max_num_pages = $wp_query->max_num_pages; // backup// Change it just for the pagination.// and $latestArticles is your custom WP_Query instance.$wp_query->max_num_pages = $latestArticles->max_num_pages;$paged = max( get_query_var( 'paged' ), get_query_var( 'page' ), 1 );understrap_pagination( [ 'current' => $paged,] );$wp_query->max_num_pages = $orig_max_num_pages; // restorehere。更好的做法:复制/编辑分页功能。由于您使用的是子主题,并且Understrap使用Sample Page template based on your original code加载定义了分页功能的文件(locate_template()),因此您只需将文件复制到子主题(inc/pagination.php)并编辑该功能以便与自定义your-theme/inc/pagination.php查询一起使用。或者由于该函数是可插入的(即用WP_Query块定义),因此您只需将代码复制到子主题的if ( ! function_exists() )文件中即可。您可以使用此修改后的功能(对我而言效果很好)或将其用作创建自己的参考:function understrap_pagination( $args = array(), $class = 'pagination' ) { $args = wp_parse_args( $args, array( 'mid_size' => 2, 'prev_next' => true, 'prev_text' => __( '&laquo;', 'understrap' ), 'next_text' => __( '&raquo;', 'understrap' ), 'screen_reader_text' => __( 'Posts navigation', 'understrap' ), 'type' => 'array', 'current' => max( 1, get_query_var( 'paged' ) ), 'total' => $GLOBALS['wp_query']->max_num_pages, ) ); // Nothing to paginate, so let's bail. if ( ! $links = paginate_links( $args ) ) { return; } ?> <nav aria-label="<?php echo $args['screen_reader_text']; ?>"> <ul class="pagination"> <?php foreach ( $links as $key => $link ) { ?> <li class="page-item <?php echo strpos( $link, 'current' ) ? 'active' : ''; ?>"> <?php echo str_replace( 'page-numbers', 'page-link', $link ); ?> </li> <?php } ?> </ul> </nav> <?php}然后在您的模板中,如下调用函数:$paged = max( get_query_var( 'paged' ), get_query_var( 'page' ), 1 );understrap_pagination( [ 'current' => $paged, 'total' => $latestArticles->max_num_pages,] );functions.php。paged与pagepaged和page都是当前页面的编号,但是:paged用于基于归档的请求/ URL,例如类别归档和搜索结果页面。对于这些请求,默认情况下未设置page。还应注意,paged与Sample Page template based on your original code一起使用。is_paged()用于单个请求/ URL,例如单个“帖子”页面和“页面”页面。对于这些请求,默认情况下未设置page。paged建议采用以下方法在单个请求/ URL上获取正确的页码:if ( get_query_var( 'paged' ) ) { $paged = get_query_var( 'paged' ); }elseif ( get_query_var( 'page' ) ) { $paged = get_query_var( 'page' ); }else { $paged = 1; }或更简单的版本:$paged = max( get_query_var( 'paged' ), get_query_var( 'page' ), 1 );注意:该Codex文章引用了静态首页,但该信息也适用于任何Pages / Posts。最后但并非最不重要的是…通过次要WP_Query调用(如$latestArticles = new WP_Query( $args )),您只需调用Codex,而无需调用wp_reset_postdata()。 :)关于php - 在页面模板中使用“new WP_Query();”时的WordPress分页问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58709835/
10-11 23:31