我目前正在寻找一种解决方案,根据最少数量的搜索结果制作搜索查询,同时并非所有搜索选项都匹配。
理想情况;
我制作了一个自定义的帖子类型,并添加了几双不同颜色和尺寸的鞋子。我正在使用WP_Query()查询'blue shoes'和'size 8'。当我进行此查询时,我只得到3件8号蓝色鞋子。现在我想在8号鞋子上添加7件相同的鞋子,共得到10件鞋子。
如何在Wordpress中与高级自定义字段结合使用?
我基于WP_query()方法制作了自定义WP_Query。并创建了一个数组来存储基于第一个查询的所有后期结果,如果该数组的长度不等于10,它将进行额外的查询。
到目前为止一直很好,但后来我得到了重复的结果:
=>我得到了3件已经发现的尺码为8的蓝色鞋子,并且在第二个查询中再次提供所有8号鞋子,包括已经找到的鞋子(来自第一个查询)。
请参阅下面的代码;
$shoe_array = array();
$args = array(
'numberposts' => -1,
'post_type' => 'my_shoes',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'size',
'value' => 8,
'compare' => 'LIKE'
),
array(
'key' => 'color',
'value' => 'blue',
'compare' => 'LIKE'
),
),
'orderby' => 'date',
'order' => 'DESC'
);
$shoes = new WP_Query( $args );
$posts = $shoes->posts;
foreach($posts as $post) {
array_push($shoe_array, $post->post_name);
}
if (count($shoe_array) > 9) {
echo 'Result of found shoes: ';
print_r($shoe_array);
} else {
$args = array(
'numberposts' => -1,
'post_type' => 'my_shoes',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'size',
'value' => 8,
'compare' => 'LIKE'
)
),
'orderby' => 'date',
'order' => 'DESC'
);
$extra_shoes = new WP_Query( $args );
$posts = $extra_shoes->posts;
foreach($posts as $post) {
array_push($shoe_array, $post->post_name);
}
echo 'Result of found shoes: ';
print_r($shoe_array);
}
任何人都知道如何让查询更“智能”?
如果需要,请随时向我提出其他问题。谢谢! : - )
答案 0 :(得分:1)
我希望代码能为您提供帮助:
<?php
$shoe_array = array();
$args = array(
'numberposts' => -1,
'post_type' => 'my_shoes',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'size',
'value' => 8,
'compare' => 'LIKE'
),
array(
'key' => 'color',
'value' => 'blue',
'compare' => 'LIKE'
),
),
'orderby' => 'date',
'order' => 'DESC',
'fields' => 'ids'
);
$shoes = get_posts( $args ) ;
$count10 = 10 - count($shoes) ;
$args2 = array(
'numberposts' => -1,
'post_type' => 'my_shoes',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'size',
'value' => 8,
'compare' => 'LIKE'
)
),
'orderby' => 'date',
'order' => 'DESC',
'post__not_in' => $shoes,
'posts_per_page' => $count10 ,
'fields' => 'ids'
);
$shoes8 = get_posts( $args2 ) ;
$post_ids = array_merge( $shoes, $shoes8);
print_r($post_ids);
?>
答案 1 :(得分:0)
所以只需添加一个不等于颜色为蓝色的条件
$args = array(
'numberposts' => -1,
'post_type' => 'my_shoes',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'size',
'value' => 8,
'compare' => 'LIKE'
)
array(
'key' => 'color',
'value' => 'blue',
'compare' => '!='
),
),
'orderby' => 'date',
'order' => 'DESC'
);