我的插件有一个短代码,它可以检索动物。有过滤器/参数,除了类别参数或参数外,它们都工作得很好。
类别名称很好地传递给了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存在,当我简单地删除类别参数时,此查询中的所有其他参数都有效。
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
, 但它被弃用了。