【问题标题】:Post in wrong category在错误的类别中发帖
【发布时间】:2014-10-09 13:09:18
【问题描述】:

我有一个奇怪的问题,有些帖子出现在它们不属于的类别中。 当我查看我的后台并按类别过滤时,那里会出现一些帖子,但它们没有被签入。

结果是他们也出现在前台。

这是我的 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();
?>

我查看了“_term_relationships”表,一切正常,它们没有属于错误的类别。

所以也许有人有线索可以找出答案?

PS : 我使用的是 WPML,但如果我停用它,也是同样的问题

【问题讨论】:

  • 删除您的自定义查询,使用主循环。也永远不要使用query_posts,它只是用于创建自定义查询的一个非常糟糕的功能。
  • 你的意思是我在后台的自定义 jquery 吗?因为我不使用一个

标签: php mysql wordpress categories wpml


【解决方案1】:

你不应该使用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;
        ?>

【讨论】:

  • 好吧,在数组中它不是“类别”而是“猫”。感谢您的帮助,但问题仍然存在。
  • 如果您删除 query_posts 并只留下循环?网址是什么?
  • ultraflux.net/category/expertise ultraflux.net/category/services 看过,他们有同一篇文章,但是这篇文章只是专业知识,不应该出现在服务中
【解决方案2】:

首先,永远不要使用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;
    }
}

【讨论】:

  • 谢谢。我从你的帖子中学到了很多东西。但是不,我的类别不是儿童。他们是两个父母......
  • 您是否有任何尚未重置的自定义查询,或者pre_get_posts的任何实例
  • 您是否回到了页面的主循环。你删除query_posts。复制您的 index.php 并将其重命名为 category.php
  • 还没有,我会尽快做的。但老实说,我不认为这会解决肮脏的问题。因为在我的后台(我没有改变任何东西),也有同样的问题......
  • 存档页面上的自定义查询总是有问题。如果您在后端遇到同样的问题,您很可能在主题中的某处错误地使用了pre_get_posts。我会从那里开始
猜你喜欢
  • 2020-12-04
  • 1970-01-01
  • 2020-11-23
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多