Tax query AND/OR meta query

时间:2017-12-22 作者:Dan.

在我的WP\\U查询中,我希望有一个税务查询和一个元查询,但我希望结果包括与税务查询和/或元查询匹配的结果-如果我像下面这样做,那么它只返回与税务查询和元查询匹配的帖子。

                $args = array(
                    \'post_type\' => \'product\',
                    \'posts_per_page\' => 12,
                    \'tax_query\' => array(
                        array(
                            \'taxonomy\' => \'product_cat\',
                            \'field\'    => \'term_id\',
                            \'terms\'    => $product_cats_to_show,
                            \'include_children\' => true
                        ),
                    ),
                    \'meta_query\' => array(
                        \'relation\' => \'AND\',
                        array(
                            \'key\' => \'color\',
                            \'value\' => \'red\',
                            \'compare\' => \'!=\',
                        )
                    )
                );
以上返回的产品具有color 属于red 以及这些类别的产品。我希望它是和/或,而不仅仅是和。一、 E.我希望查询返回所有产品color 属于red 以及税务查询中指定类别中的所有产品。

是否可以使用WP\\u查询参数?还是需要构建自定义查询?

谢谢

1 个回复
SO网友:Dan.

如果没有更自定义的查询/过滤器,这是不可能的。

我用一个过滤器实现了这一点(代码取自这家伙的要点-https://gist.github.com/elvismdev/61f8509eff8abcc21ef84154b74fbf56)

function f1_egpaf_meta_or_tax( $where, \\WP_Query $q ) {
    // Get query vars.
    $tax_args = isset( $q->query_vars[\'tax_query\'] ) ? $q->query_vars[\'tax_query\'] : null;
    $meta_args = isset( $q->query_vars[\'meta_query\'] ) ? $q->query_vars[\'meta_query\'] : null;
    $meta_or_tax = isset( $q->query_vars[\'_meta_or_tax\'] ) ? wp_validate_boolean( $q->query_vars[\'_meta_or_tax\'] ) : false;

    // Construct the "tax OR meta" query.
    if ( $meta_or_tax && is_array( $tax_args ) && is_array( $meta_args ) ) {
        global $wpdb;
        // Primary id column.
        $field = \'ID\';
        // Tax query.
        $sql_tax  = get_tax_sql( $tax_args, $wpdb->posts, $field );
        // Meta query.
        $sql_meta = get_meta_sql( $meta_args, \'post\', $wpdb->posts, $field );
        // Modify the \'where\' part.
        if ( isset( $sql_meta[\'where\'] ) && isset( $sql_tax[\'where\'] ) ) {
            $where  = str_replace(
            [ $sql_meta[\'where\'], $sql_tax[\'where\'] ],
            \'\',
            $where
            );
            $where .= sprintf(
            \' AND ( %s OR  %s ) \',
            substr( trim( $sql_meta[\'where\'] ), 4 ),
            substr( trim( $sql_tax[\'where\'] ), 4 )
            );
        }
    }
    return $where;
}
add_filter( \'posts_where\', \'f1_egpaf_meta_or_tax\', PHP_INT_MAX, 2 );
然后,只需添加\'_meta_or_tax\'=>符合事实的to the参数array passed toWP\\U查询()`

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post