我有一个奇怪的问题,有些帖子出现在他们不在的类别中。 当我查看我的后台并按类别过滤时,会出现一些帖子,但它们没有签入。
结果是在前台他们也出现了。
这是我的category.php(但我不认为这是事情)
<?php
get_header();
?>
<section id="wrapper" class="page <?php echo get_query_var('cat'); ?>">
<div id="container">
<?php
$category = get_category(get_query_var('cat'));
$cat_id = $category->cat_ID;
query_posts('showposts=1&cat='.$cat_id);
if ( have_posts() ) :
while ( have_posts() ) : the_post();
get_template_part( 'content', get_post_format() );
endwhile;
endif;
?>
</div>
</section>
<?php
get_footer();
?>
我看着桌子&#34; _term_relationships&#34;一切都是对的,他们不是错误的类别。
所以也许有人有发现的线索?
PS:我使用的是WPML,但如果我拒绝它,那就是同样的问题
答案 0 :(得分:0)
你不应该使用query_posts()
,
见(https://wordpress.stackexchange.com/questions/1753/when-should-you-use-wp-query-vs-query-posts-vs-get-posts)
试试这个:
<?php
$category = get_category(get_query_var('cat'));
$cat_id = $category->cat_ID;
$args = array( 'category' => $cat_id );
$query2 = new WP_Query($args);
if ( $query2->have_posts() ) :
while ( $query2->have_posts() ) :
$query2->the_post();
get_template_part( 'content', get_post_format() );
endwhile;
endif;
?>
答案 1 :(得分:0)
首先,永远不要使用query_posts
构建任何类型的查询
注意:此功能不适用于插件或主题。如后面所述,有更好的,更高性能的选项来改变主查询。 query_posts()是一种过于简单化和有问题的方法来修改页面的主要查询,方法是用新的查询实例替换它。它是低效的(重新运行SQL查询)并且在某些情况下会彻底失败(特别是在处理帖子分页时)。
其次,永远不要在任何类型的存档页面或主页上更改自定义查询的主查询。正确的方法是在主查询执行之前使用pre_get_posts
来更改查询变量。查看this post我之前做过的
第三,Wordpress中的类别页面确实以奇怪的方式工作。访问类别页面时,它将显示所选类别的帖子和所选类别的子类别的帖子。我打赌这就是你所看到的。这是非常正常的行为。如果您需要更改此设置,请查看@ialocin的this answer on WPSE。为了这个答案的好处,这是解决方案
add_filter(
'parse_tax_query',
'wpse163572_do_not_include_children_in_category_archive_parse_tax_query'
);
function wpse163572_do_not_include_children_in_category_archive_parse_tax_query( $query ) {
if (
! is_admin()
&& $query->is_main_query()
&& $query->is_category()
) {
// as seen here: https://wordpress.stackexchange.com/a/140952/22534
$query->tax_query->queries[0]['include_children'] = 0;
}
}