我正在尝试将自定义存档帖子和默认帖子合并到一个我管理的存档页面上。。。有点像,但我无法使用pagenavi插件或主题默认分页代码进行分页。我尝试过使用paged,但如果有任何显示,我不确定它是否会将两个类别一起分页,或者只分页一个类别。
我需要组合两个类别,一个是自定义分类法,另一个是默认分类法,然后对它们进行不同的样式设置,在页面上有一组数量的组合帖子,并且能够将它们放在9篇帖子的页面中。
我使用的代码:
<?php if (is_category()) { ?>
<h1 class="page-title">
<span><?php _e(); ?></span> <?php single_cat_title(); ?>
</h1>
<?php } ?>
<ul>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php get_template_part( \'partials/loop\', \'archive\' ); ?>
<?php endwhile; ?>
</ul>
<?php rewind_posts(); ?>
<?php
$args = array(
\'post_type\' => \'events\',
\'posts_per_page\' => \'6\',
\'paged\' => $paged,
\'tax_query\' => array(
array(
\'taxonomy\' => \'event_cat\',\'events\',
\'field\' => \'slug\',
\'terms\' => \'events\',\'upcoming-events\'
)
)
);?>
<?php $the_query = new WP_Query( $args ); ?>
<ul>
<?php if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php get_template_part( \'partials/loop\', \'archive-events\' ); ?>
<?php endwhile; ?>
</ul>
<?php wp_pagenavi(); ?>
<?php else : ?>
<?php get_template_part( \'partials/content\', \'missing\' ); ?>
<?php endif; ?>
将上述内容更改为:
<?php if (is_category()) { ?>
<h1 class="page-title">
<span><?php _e(); ?></span> <?php single_cat_title(); ?>
</h1>
<?php } ?>
<ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-3">
<?php $query = new WP_Query( array( \'cat\' => \'7\' )); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php get_template_part( \'partials/loop\', \'archive\' ); ?>
<?php endwhile; ?>
</ul>
<?php else : ?>
<?php get_template_part( \'partials/content\', \'missing\' ); ?>
<?php endif; ?>
<?php rewind_posts(); ?>
<?php
$args = array(
\'post_type\' => \'events\',
\'posts_per_page\' => \'3\',
\'paged\' => get_query_var( \'paged\' ),
\'tax_query\' => array(
array(
\'taxonomy\' => \'event_cat\',
\'field\' => \'slug\',
\'terms\' => \'events\'
)
)
);?>
<?php $the_query = new WP_Query( $args ); ?>
<ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-3">
<?php if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php get_template_part( \'partials/loop\', \'archive-events\' ); ?>
<?php endwhile; ?>
</ul>
<?php if (function_exists(\'joints_page_navi\')) { ?>
<?php wp_pagenavi(); ?>
<?php } else { ?>
<nav class="wp-prev-next">
<ul class="clearfix">
<li class="prev-link"><?php next_posts_link(__(\'« Older Entries\', "jointstheme")) ?></li>
<li class="next-link"><?php previous_posts_link(__(\'Newer Entries »\', "jointstheme")) ?></li>
</ul>
</nav>
<?php } ?>
<?php endif; ?>
SO网友:Pieter Goosen
我建议您放弃所有现有内容,并返回归档页面上的默认循环。自定义查询在存档页面上总是很麻烦。
使用pre_get_posts
在执行主查询之前更改查询变量。这样,您就不会有任何不必要的查询和分页问题。您将使用此处的税务查询来包括您的两个术语。中使用的所有可用参数pre_get_posts
, 看见WP_Query
这是我的想法
如上所述,返回归档页面中的默认循环
在您的函数中。php,使用pre_get_posts
和条件检查is_archive()
. 此代码将向存档页面添加两个所需的术语
function custom_archive_query( $query ) {
if ( !is_admin() && $query->is_archive() && $query->is_main_query() ) {
$query->set( \'posts_per_page\', 9 );
$query->set( \'post_type\', \'any\' );
$tax_query = array(
\'relation\' => \'OR\',
array(
\'taxonomy\' => \'event_cat\',
\'field\' => \'slug\',
\'terms\' => \'events\',
),
array(
\'taxonomy\' => \'category\',
\'field\' => \'term_id\',
\'terms\' => \'7\',
),
);
$query->set( \'tax_query\', $tax_query );
}
}
add_action( \'pre_get_posts\', \'custom_archive_query\' );
至于样式问题,在循环内的存档页上,使用两个条件,
has_category()
和
has_term
检查一篇文章属于哪个术语,并根据该术语设置样式
if( has_category( 7 ) ) {
// DO SOMETHING FOR CATEGORY
}elseif( has_term( \'events\', \'event_cat\' ) ) {
// DO SOMETHING FOR TERM event_cat
}
请注意:这些都未经测试
EDIT
您可以使用
WP_Query
也