所以我在理解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
是否为equal
到meta_value
的地方,这将非常有用还要检查_al_listing_state
是equal
还是meta_value
例如,_al_listing_condition
的{{1}}可能是meta_value
,而new
的{{1}}可能会_al_listing_state