wp查询分页和类别

Posted

技术标签:

【中文标题】wp查询分页和类别【英文标题】:Wp query pagination and categories 【发布时间】:2018-03-09 10:26:02 【问题描述】:

我是 Wp 的新手,我正在尝试开发我的第一个主题。在我将分页添加到我的存档页面后,类别过滤器不再起作用(可能是因为我覆盖了 WP 查询)。

我应该在查询中输入什么才能仅查看被点击类别的帖子? (如果我不放任何东西 wp 做魔法)但没有查询分页不起作用。

这是archive.php

<?php
    get_header(); ?>

    <?php
    if ( have_posts() ) : ?>

        <header class="page-header no-image">
            <?php
                the_archive_title( '<h1 class="page-title u-text-center">', '</h1>' );
            ?>
        </header><!-- .page-header -->

        <?php get_template_part( 'template-parts/filter-category' ); ?>

        <?php
         /*QUERY:
         This is the problem if I move the query from there the category works but 
         If I leave the query the pagination doesn't have the post_per_page argument to take and doesn't work...
         */
          $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
          $args = array(
            'post_type'=>'post',
            'post_status'=>'publish',
            'posts_per_page' => 6,
            'paged' => $paged
          );
          $wp_query = new WP_Query( $args );
         /*END QUERY*/
        ?>

        <div id="blogpost-list" class="container">
          <div class="row blogpost-wrapper">
            <?php
            /* Start the Loop */
            $i = 1;
            while ( $wp_query->have_posts() ) : $wp_query->the_post();?>
              <?php if ($i % 3 == 0): ?>
                <div class="blogpost-item-grid">
                    <!-- some stuff to display the post.. doesn't really matter-->
                  <?php get_template_part( 'template-parts/content-post-preview-large' ); ?>
                </div>
              <?php else: ?>
                <div class="blogpost-item-grid">
                    <!-- some stuff to display the post doesn't really matter -->
                  <?php get_template_part( 'template-parts/content-post-preview' ); ?>
                </div>
              <?php endif; ?>
              <?php $i++; ?>
            <?php endwhile;?>
          </div>
        </div>

        <?php get_template_part( 'template-parts/pagination' ); ?>

        <?php
        else :
            get_template_part( 'template-parts/content', 'none' );
        endif; ?>

<?php
get_footer();

这里是我用于分页的代码:

<?php //Require a wp->query ?>
<div class="container-fluid">
  <div class="pagination-wrapper">
    <?php
    $pag_args = array(
        'base'         => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
        'total'        => $wp_query->max_num_pages,
        'current'      => max( 1, get_query_var( 'paged' ) ),
        'format'       => '?paged=%#%',
        'show_all'     => false,
        'type'         => 'plain',
        'end_size'     => 2,
        'mid_size'     => 1,
        'prev_next'    => true,
        'prev_text'    => sprintf( '<img class="icn icn-small" src="' . get_template_directory_uri() .'/assets/images/icn-chevron-left.svg"/>'),
        'next_text'    => sprintf( '<img class="icn icn-small" src="' . get_template_directory_uri() .'/assets/images/icn-chevron-right.svg"/>'),
        'add_args'     => false,
        'add_fragment' => '',
    );
    echo paginate_links($pag_args);
    ?>

</div>
</div>

已解决: 添加此以获取类别

get_header();
$catID = get_queried_object_id();

将其传递给查询:

    $args = array(
      [...]
      'cat' => $catID
    );
    $wp_query = new WP_Query( $args );

【问题讨论】:

能否也分享一下分类模板部分的代码? 好的,谢谢,我更新了帖子 【参考方案1】:

问题是您在实例化后没有使用 $wp_query 变量。 您的 while 循环 应如下所示:

while ( $wp_query->have_posts() ) : $wp_query->the_post();?>
   /*Your inner code here*/
<?php endwhile;?>

【讨论】:

谢谢,现在分页可以正常工作,但我仍然可以看到所有帖子,而不仅仅是该类别中的帖子。我应该在查询中传递类别吗?【参考方案2】:

如果 category.php 文件不存在,您可以创建它。然后在你的文件里面

<?php
    get_header();
   $catID = get_queried_object_id();

 ?>

    <?php
    if ( have_posts() ) : ?>

        <header class="page-header no-image">
            <?php
                the_archive_title( '<h1 class="page-title u-text-center">', '</h1>' );
            ?>
        </header><!-- .page-header -->

        <?php get_template_part( 'template-parts/filter-category' ); ?>

        <?php
         /*QUERY:
         This is the problem if I move the query from there the category works but 
         If I leave the query the pagination doesn't have the post_per_page argument to take and doesn't work...
         */
          $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
          $args = array(
            'post_type'=>'post',
            'post_status'=>'publish',
            'posts_per_page' => 6,
            'cat' => $catID,
            'paged' => $paged
          );
          $wp_query = new WP_Query( $args );
         /*END QUERY*/
        ?>

        <div id="blogpost-list" class="container">
          <div class="row blogpost-wrapper">
            <?php
            /* Start the Loop */
            $i = 1;
            while ( $wp_query->have_posts() ) : $wp_query->the_post();?>
              <?php if ($i % 3 == 0): ?>
                <div class="blogpost-item-grid">
                    <!-- some stuff to display the post.. doesn't really matter-->
                  <?php get_template_part( 'template-parts/content-post-preview-large' ); ?>
                </div>
              <?php else: ?>
                <div class="blogpost-item-grid">
                    <!-- some stuff to display the post doesn't really matter -->
                  <?php get_template_part( 'template-parts/content-post-preview' ); ?>
                </div>
              <?php endif; ?>
              <?php $i++; ?>
            <?php endwhile;?>
          </div>
        </div>

        <?php get_template_part( 'template-parts/pagination' ); ?>

        <?php
        else :
            get_template_part( 'template-parts/content', 'none' );
        endif; ?>

<?php
get_footer();

【讨论】:

太棒了,谢谢。所以最后我只需要获取类别并将其添加到我的 quwìery 'cat' => $catID。您是否建议使用分类页面而不是存档? 您可以在 archive.php 中使用它,但首先检查是否是类别,以便为您的查询提供正确的参数。如果它让您感到困惑,请离开 category.php。 好的,明白了。非常感谢你的帮助。我将使用更干净的类别页面。现在分页不起作用:当我单击下一页时,我没有得到帖子。我看到的是 404 页面模板。 (我使用相同的代码来显示所有新闻,在这种情况下可以正常工作)。 分页 dsnt 在类别中工作??刷新您的永久链接并检查是否有其他内容破坏了您的分页。也许你的分页代码 是的,它不仅在类别页面中有效,我尝试刷新永久链接但没有任何运气。我正在使用默认的 paginate_links() 函数。我会检查的。非常感谢codex.wordpress.org/Function_Reference/paginate_links

以上是关于wp查询分页和类别的主要内容,如果未能解决你的问题,请参考以下文章

基于 mybatis 的分页和过滤查询

SQL分页和HQL分页查询

RTK 查询分页和合并查询

Mysql分页和排序子查询聚集函数

Spring Data Cassandra 中的分页和排序查询

带有分页和计数的 SQL Server 查询