在key1和key 2值匹配的Wordpress元查询参数搜索中

时间:2019-08-11 17:20:34

标签: php wordpress

所以我在理解wordpress的元查询参数时遇到了问题,并且得到了意外的结果。

首先,我要设置元参数

$atts = shortcode_atts(
            [
                'orderby' => 'date',
                'order'   => 'desc',
                'number'  => '20',
                'seller'  => '', // id of the seller.
                'condition'  => '', // condition of vehicle
                'ids'     => '',
                'compact' => '',
                'state'   => '', //listing state
            ],
            $atts
        );

        $query_args = [
            'post_type'           => 'auto-listing',
            'post_status'         => 'publish',
            'ignore_sticky_posts' => 1,
            'orderby'             => $atts['orderby'],
            'order'               => $atts['order'],
            'posts_per_page'      => $atts['number'],
        ];

        if ( ! empty( $atts['ids'] ) ) {
            $query_args['post__in'] = array_map( 'trim', explode( ',', $atts['ids'] ) );
        }

        if ( ! empty( $atts['state']) ) {
            $query_args['meta_key']     = '_al_listing_listing_state';
            $query_args['meta_value']   = $atts['state'];
            $query_args['meta_compare'] = '=';
        }

        if ( ! empty( $atts['seller'] ) ) {
            $query_args['meta_key']     = '_al_listing_seller';
            $query_args['meta_value']   = absint( $atts['seller'] );
            $query_args['meta_compare'] = '=';
        }

        if ( ! empty( $atts['condition'] ) ) {
            $query_args['meta_key']     = '_al_listing_condition';
            $query_args['meta_value']   = $atts['condition'];
            $query_args['meta_compare'] = '=';
        }

因此,如果在短代码中仅提供1个参数,则此方法很好,但是如果我要提供“状态”和“条件”,则此方法将无法工作,因为它将使用最后一个值覆盖query_args列表。

起初我以为这很简单,所以我对条件区域进行了修改

if ( ! empty( $atts['condition'] ) ) {
            $query_args['meta_key']     = '_al_listing_condition';
            $piece = explode(",",$atts["condition"]);
            $query_args['meta_value']   = join(', ', $piece);
            $query_args['meta_compare'] = '=';
        }

现在,如果我只想获取条件位于数组中的帖子,但我想检查_al_listing_condition是否为equalmeta_value的地方,这将非常有用还要检查_al_listing_stateequal还是meta_value

例如,_al_listing_condition的{​​{1}}可能是meta_value,而new的{​​{1}}可能会_al_listing_state

0 个答案:

没有答案