wp_query的复杂查询参数的扩展operator的between操作



在wp_query()自定义查询中,有一种高级查询方法,

Taxonomy

Taxonomy是一种的通用的分类。Tag和Category其实都可以算在Taxonomy中,实际上Tag和Category也是利用Taxonomy来实现的,你也可以创建自己的一套Taxonomy,有兴趣的话我们可以在以后的文章中继续讨论Taxonomy。利用Taxonomy,你可以够造适合你需求的各种查询函数。这里我们只拿一个较为复杂的例子来说明:

$args = array(
'post_type' => 'post',
'tax_query' => array(
'relation' => 'OR',

$fields = array(
array(
‘taxonomy’ => ‘pa_shape’,
‘field’ => ‘name’,
‘terms’ => $shape_in,
‘operator’ => ‘IN’
),
array(
‘taxonomy’ => ‘pa_color’,
‘field’ => ‘name’,
‘terms’ => $color_in,
‘operator’ => ‘IN’
)

);
$query = new WP_Query( $args );

 

在这种情况下,默认的operator操作符是包含“in” 但是特定应用下,operator需要表达between来区分,这个时候可以对field做一个标记 ,例如定位为 vanfon_name,再修改文件 在wp_include/taxonomy.php

查找到:switch ( $query[‘field’] ) {  这一行,然后新增case项,编辑对应sql语句即可,例如本次实际应用:

case ‘vanfon_name’:
//$terms = “‘” . implode( “‘,'”, array_map( ‘sanitize_title_for_query’, $query[‘terms’] ) ) . “‘”;
$terms = $query[‘terms’];
$terms = $wpdb->get_col( ”
SELECT $wpdb->term_taxonomy.$resulting_field
FROM $wpdb->term_taxonomy
INNER JOIN $wpdb->terms USING (term_id)
WHERE taxonomy = ‘{$query[‘taxonomy’]}’
AND $wpdb->terms.name between $terms[0] and $terms[1]
” );
break;