WP_query最低发布结果

时间:2017-11-23 17:01:02

标签: php arrays wordpress

我目前正在寻找一种解决方案,根据最少数量的搜索结果制作搜索查询,同时并非所有搜索选项都匹配。

理想情况;

我制作了一个自定义的帖子类型,并添加了几双不同颜色和尺寸的鞋子。我正在使用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);

}

任何人都知道如何让查询更“智能”?

如果需要,请随时向我提出其他问题。谢谢! : - )

2 个答案:

答案 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'
);