WordPress短code多meta_key筛选CPT Events异常问题咨询
问题原因及修复方案
你的短代码逻辑有2处核心错误导致meta筛选不生效:
- PHP变量解析规则错误:你用单引号包裹
$day、$month变量,单引号内的PHP变量不会被解析,实际查询时匹配的是字符串$day而非你传入的参数值 - meta_query参数嵌套错误:
$meta_query本身已经是符合WP要求的多维条件数组,传入查询参数时不需要额外再套一层array() - 可选优化:如果短代码调用时没有传
day或month参数,不要添加对应筛选条件,避免匹配到自定义字段值为空的异常结果
修正后的完整代码
function tribe_custom_events_shortcode($atts, $content = null) { global $post; extract(shortcode_atts(array( 'cat' => '', 'num' => '', 'order' => 'ASC', 'orderby' => 'post_date', 'taxonomy' => 'tribe_events_cat', 'field' => 'name', 'day' => '', 'month' => '', ), $atts)); $tax_query = array( 'taxonomy' => $taxonomy, 'field' => $field, 'terms' => $cat, ); // 动态构建meta_query $meta_query = array('relation' => 'AND'); if (!empty($day)) { $meta_query[] = array( 'key' => 'event_day', 'value' => $day, 'compare' => '=' ); } if (!empty($month)) { $meta_query[] = array( 'key' => 'event_month', 'value' => $month, 'compare' => '=' ); } $args = array( 'post_type' => 'tribe_events', 'posts_per_page' => $num, 'order' => $order, 'orderby' => $orderby, 'tax_query' => array($tax_query), 'meta_query' => $meta_query, ); $output = ''; $posts = get_posts($args); foreach ($posts as $post) { setup_postdata($post); $output .= '<div class="tribe-mini-calendar-event event-0 first last">'; $output .= '<h4 class="tribe-events-title"><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></h4>'; $output .= '</div>'; } wp_reset_postdata(); return '<div>' . $output . '</br></div>'; } add_shortcode('tribe_custom_events_list_mm_wed', 'tribe_custom_events_shortcode');
验证说明
修正后你原来的短代码调用格式[tribe_custom_events_list_mm_wed cat="Rodrigo" num="6" day="Monday" month="October"]可直接正常使用,也支持只传月份或只传日期的筛选场景。
内容的提问来源于stack exchange,提问作者Ion T
相关产品推荐
相关产品推荐

