找不到第二级类别的结果

时间:2017-05-08 作者:Sarvesh Shejwadkar

我正在尝试从类别中检索帖子。我有2级和3级类别层次结构。我正在使用pre-get posts过滤器中的税务查询来更改查询。

对于第一级和第三级类别,查询工作正常,但对于第二级类别,查询结果不显示。检查时,查询在where子句中添加了0=1,用于不产生结果的查询。

对于2级类别,查询对于父类别和子类别都可以正常工作。

我用Wordpress安装了woocommerce。

下面是添加的过滤器:

add_action(\'pre_get_posts\', \'alter_category_search_query\');

function alter_category_search_query($query) {
  if ($query->is_main_query() && $query->is_search) {
    $args = array(
      array(
        \'taxonomy\' => \'product_cat\',
        \'field\'    => \'slug\',
        \'terms\'    => $_GET[\'cat\'],
        \'include_children\' => false
      )
    );
    $query->set(\'tax_query\', $args);

    //we remove the actions hooked on the \'__after_loop\' (post navigation)
    remove_all_actions(\'__after_loop\');
  }
}
生成的SQL:

SELECT wp_posts.* FROM wp_posts  LEFT JOIN wp_term_relationships ON
(wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON ( 
wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1  AND ( 
wp_term_relationships.term_taxonomy_id IN (17) 
AND 
0 = 1
) AND ( 
( wp_postmeta.meta_key = \'_visibility\' AND wp_postmeta.meta_value IN 
(\'visible\',\'search\') )
) AND wp_posts.post_type = \'product\' AND (wp_posts.post_status = \'publish\') 
GROUP BY wp_posts.ID ORDER BY wp_posts.menu_order ASC, wp_posts.post_title 
ASC

2 个回复
SO网友:Mark Kaplun

查看为查询的术语部分生成SQL的函数的代码https://developer.wordpress.org/reference/classes/wp_tax_query/get_sql_for_clause/, 看起来像是0 = 1 是查询中给出的错误参数的症状,因此,虽然您认为传递的参数是正确的,但显然没有。

前进的唯一方法可能是调试该函数中到底发生了什么,以了解失败的原因。

旁注:使用未初始化的url参数总是一个坏主意,另外使用cat as参数似乎是个坏主意,除非您真的想让它和一般的帖子类别相冲突。

SO网友:Sarvesh Shejwadkar

我设法解决了这个问题。问题是$args数组的语法不正确。我必须将“terms”值包装在一个数组中,即使它是单个值。所以必须这样

$args = array(
  array(
    \'taxonomy\' => \'product_cat\',
    \'field\'    => \'slug\',
    \'terms\'    => array($_GET[\'cat\']),
    \'include_children\' => false
  )
);

结束

相关推荐

Categories' hierarchy in URL

我目前正在处理的网站中的帖子都有多个层次分类。例如:Source - Books -- Moby Dick -- Sherlock Holmes 永久链接设置为/%category%/%postname%/. 然而,一篇文章的URL并不包括所有的子类别——我得到的只是site.com/source/books/*postname*, 尽管这篇文章在来源上没有分类,但只在书籍+白鲸上。有人能帮我找出如何调整这种行为吗?非常感谢。