分页链接不反映帖子数

时间:2021-04-08 16:45:07

标签: php wordpress pagination wordpress-theming custom-post-type

<? get_header() ;?>
​
​
<?
$cat_param = 'select-category';
if (strpos($_SERVER['REQUEST_URI'], $cat_param)) {
  $category_id = htmlspecialchars($_GET[$cat_param]);
} else {
  $category_id = null;
}
?>
​
​
<article id="post-<? the_ID(); ?>" <? post_class('bg-white'); ?>  data-file="<? echo basename(__FILE__); ?>">
  <div class="wrap-outer">
    <div class="py-5 py-md-6 py-lg-7 py-xl-8 wrap-inner">
      <div class="container-fluid container-lg">
        <div class="row">
          <div class="col-12 col-md-8">
            <form method="" action="<? echo get_post_type_archive_link('pcm_review'); ?>/">
              <div class="form-group posts-filter">
                <div class="input-group">
                  <div class="input-group-prepend">
                    <label class="input-group-text" for="review-select-category"><i class="fas fa-filter"></i></label>
                  </div>
                  <?
                  $args_cats = array(
                    'show_option_all'   => 'Show All',
                    'orderby'           => 'name',
                    'order'             => 'ASC',
                    'show_count'        => 0,
                    'echo'              => 1,
                    'selected'          => $category_id,
                    'name'              => $cat_param,
                    'id'                => $cat_param,
                    'class'             => 'select-category form-control ml-auto',
                    'taxonomy'          => 'category',
                    'hide_if_empty'     => false,
                    'option_none_value' => -1,
                    'value_field'       => 'term_id',
                    'required'          => false,
                  );
                  wp_dropdown_categories( $args_cats );
                  ?>
                </div>
              </div>
              <script type="text/javascript">
                jQuery(function() {
                  $('#select-category').change(function() {
                    this.form.submit();
                  });
                });
              </script>
              <hr>
            </form>
            <?
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
            $args_reviews = array(
              'post_type'       => 'pcm_review',
              'cat'             => $category_id,
              'paged'           => $paged,
            );
            $query_reviews = new WP_Query( $args_reviews );
            if ( $query_reviews->have_posts() ) {
              while ( $query_reviews->have_posts() ) {
                $query_reviews->the_post();
                $content        = get_post_meta(get_the_ID(), 'pcm_review_content', true);
                $name           = get_post_meta(get_the_ID(), 'pcm_review_name', true);
                $rating_str     = get_post_meta(get_the_ID(), 'pcm_review_rating', true);
                $rating_int     = intval($rating_str);
                $rating_star    = '<i class="fas fa-star mr-1 text-warning"></i>';
                $rating_stars   = str_repeat($rating_star, $rating_int);
                ?>
                  <div id="post-<? the_ID(); ?>" <? post_class(''); ?>>
                    <p>
                      <span class="review-stars"><? echo $rating_stars; ?></span><br>
                      <b><? the_title(); ?></b>
                    </p>
                    <div class="review-content">
                      <? echo $content; ?>
                    </div>
                    <div class="justify-content-between row small text-muted">
                      <div class="col-auto">
                        <i class="fas fa-user mr-2"></i><span class="review-name"><? echo $name; ?></span>
                      </div>
                      <div class="col-auto">
                        <i class="fas fa-tag mr-2"></i><span class="review-categories"><? echo get_the_category_list(', '); ?></span>
                      </div>
                    </div>
                    <hr>
                  </div>
                <?
              }
              the_posts_pagination();
            } else {
              pcm_no_results();
            }
            wp_reset_postdata();
            ?>
          </div>
          <div class="col-12 col-md-4">
            <div class="sidebar-wrap sticky-top">
              <? get_template_part('template-parts/aside-blog'); ?>
              <? get_template_part('template-parts/aside-reviews'); ?>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</article>
​
​
<? get_footer() ;?>

正在努力解决分页问题,​​非常感谢您的帮助。我在此处或其他论坛上的搜索没有取得任何进展,所以想寻求帮助。

背景

我有一个用于推荐/评论的自定义帖子类型,它支持类别分类法。我的模板文件包含一个下拉列表/选择列表,允许访问者选择一个类别,如果他们想要过滤评论并只查看他们所选类别的评论。

问题

好吧,假设我总共有 10 条评论,其中只有 5 条被分配到“A 类”。如果访问者按“A 类”过滤帖子,他们仍然会看到分页链接,好像有 10 个帖子而不是属于“A 类”的 5 个帖子。我希望这是有道理的。 控制台或调试日志中没有错误。

代码解释

第 5 行开始了一个小片段,只是为了让后面的文件更容易。如果在 URL 中找到类别参数,则将 var 设置为类别 ID 的值。如果不是,我们将类别 ID 设置为 null。

第 20 行开始包含 wp_dropdown_categories() 函数的表单,该函数输出我的类别列表。我们将 selected param 设置为与第 5 行中的类别 ID 相同的值。表单操作属性设置为评论的主存档 url,以便如果选择了一个类别并且用户在除第一个页面之外的任何页面上,它们被指向回根评论存档网址。

当从下拉列表中选择一个选项时,第 47 行只是强制表单提交。

第 57 行只是告诉 WordPress 我们当前在哪个页面上,然后是查询的其余部分。

1 个答案:

答案 0 :(得分:0)

通过将 'total'=> $query_reviews->max_num_pages 参数添加到我的分页函数中,这将输出正确数量的分页链接,因为它使用我查询的 max_num_pages 值而不是主查询。避免了危机。

相关问题