按自定义帖子类型和自定义分类查询帖子

时间:2010-12-08 作者:ToddSmithSalter

我正在编写一个自定义循环查询,以过滤自定义帖子类型和自定义分类法。为了向您展示我想要的结果,我用静态值替换了所有变量。

$args = array(
    \'manufacturer\' => \'Keystone\',
    \'post_type\' => \'rv\',
    \'category_name\' => \'new\',
    \'rvtype\' => \'fifth-wheel\'
);

$loop = new WP_Query($args);
当我运行这个循环时,显示的不是第五个轮子,而是制造商类型“Keystone”下的所有帖子。为什么会这样?这个查询不应该只显示带有请求的自定义分类法的帖子,在帖子类型=rv下,以及带有新类别,rvtype=第五轮的帖子吗?

如有任何见解,将不胜感激!

1 个回复
SO网友:MathSmath

可以肯定的是,您无法在一个查询中匹配多个分类术语——Wordpress只会尊重第一个,而忽略其余的。

显然,这将在3.1中修复。

同时,有一个插件可以立即修复您:http://scribu.net/wordpress/query-multiple-taxonomies

EDIT:如果您想要非插件解决方案,请告诉我。我有一个我用的。

EDIT:这是一种快速而肮脏的非插件方式。将此代码放入函数中。php文件。

function wpse_5057_match_multiple_taxonomy_terms($where_clause, $wp_query) {

    // If the query obj exists
    if (isset($wp_query->query)) {

        $multi_query = $wp_query->query;

        if (is_array($multi_query) && isset($multi_query[\'multiple_terms\'])) {

            global $wpdb;
            $arr_terms = $multi_query[\'multiple_terms\'];

            foreach($arr_terms as $key => $value) {

                $sql = "AND $wpdb->posts.ID IN(
                    SELECT tr.object_id
                    FROM $wpdb->term_relationships AS tr
                    INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
                    INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id
                    WHERE tt.taxonomy=\'%s\' AND t.slug=\'%s\')";

                $where_clause .= $wpdb->prepare($sql, $key, $value); // add to the where

            }
        }

    }

    return $where_clause; // return the filtered where

}
add_action(\'posts_where\',\'wpse_5057_match_multiple_taxonomy_terms\',10,2); // Hook this to posts_where
现在,当您运行查询时,添加一个名为multiple\\u terms的新参数。这应该包含一个数组,其中键是分类名称,值是要匹配的值。像这样:

$args = array(
    \'post_type\' => \'rv\',
    \'multiple_terms\' => array(\'manufacturer\' => \'Keystone\', \'rvtype\' => \'fifth-wheel\')
);
对我有用。这是根据我在另一个论坛或博客上找到的想法修改的,但我一生都找不到它。

结束

相关推荐