在我的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查询参数?还是需要构建自定义查询?
谢谢
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 to
WP\\U查询()`