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查询分页和类别的主要内容,如果未能解决你的问题,请参考以下文章