CATEGORY_NAME不工作(未显示在SQL查询调试中)

时间:2016-02-23 作者:Lazhar

我的插件有一个短代码,它可以检索动物。有过滤器/参数,除了类别参数或参数外,它们都工作得很好。

类别名称很好地传递给了my shortcode函数,但WP\\U查询->请求没有显示任何类别名称的符号!我试着用猫和身份证,同样,什么也没出现。相反,它返回一组空的结果。

    $filters    = array();
    $cat        = "";

    if( !empty($args[\'cat\']) ) {
        $cat = trim($args[\'cat\']);
    }

    $query = new WP_Query( array( 
        \'post_type\'         => \'animal\',
        \'category_name\'     => \'rottweiler\', /* ignored/breaks the sql query */
        \'post_status\'       => \'publish\',
        \'orderby\'           => \'title\',
        \'order\'             => \'asc\',
        \'numberposts\'       => -1,
        \'posts_per_page\'    => -1,
        \'meta_query\'        => $filters
    ) );

    $animals = $query->get_posts();

    if( $animals ) {

        $columns = empty($args["columns"]) ? 2 : $args["columns"];

        $output .= \'<div class="breedr"><ul class="columns \'.number_to_words($columns).\'">\';

        foreach ( $animals as $animal ) {
            $output .= $this->breedr_template( plugin_dir_path( dirname( __FILE__ ) ) . \'public/partials/list-single-animal.php\', $animal );
        }

        $output .= \'</ul></div>\';

    }
    else {
        $output .= "<span>No animal found.</span>";
    }

    return $output;
这就是调试sql返回的结果,并且(0=1)显然在这里提出了问题:

CAT: rottweiler
SELECT wp_2_posts.* FROM wp_2_posts WHERE 1=1 AND ( 0 = 1 ) AND wp_2_posts.post_type = \'animal\' AND ((wp_2_posts.post_status = \'publish\')) GROUP BY wp_2_posts.ID ORDER BY wp_2_posts.post_title ASC 

No animal found.
我对这个问题的原因感到困惑。类别slug存在,当我简单地删除类别参数时,此查询中的所有其他参数都有效。

1 个回复
SO网友:Krzysiek Dróżdż

如果您正在为您的CPT使用自定义分类法,那么您不能使用与内置类别相关的WP\\U查询参数-WP将无法猜测应该查询什么分类法。

那么,假设您有一个自定义分类法,名为animal_type, 那么您的查询应该如下所示:

$query = new WP_Query( array( 
    \'post_type\'         => \'animal\',
    \'post_status\'       => \'publish\',
    \'orderby\'           => \'title\',
    \'order\'             => \'asc\',
    \'posts_per_page\'    => -1,
    \'tax_query\'         => array(
        array( \'taxonomy\' => \'animal_type\', \'field\' => \'slug\', \'terms\' => \'rottweiler\' )
    ),
    \'meta_query\'        => $filters
) );
请注意,我还删除了此部分:

\'numberposts\'       => -1,
WP\\U查询没有此类参数。已调用参数showposts, 但它被弃用了。