【问题标题】:Shortcode with multiple meta_key attributes具有多个 meta_key 属性的简码
【发布时间】:2021-12-04 05:05:03
【问题描述】:

我为 CPT 活动添加了两个自定义字段:日 (event_day) 和月 (event_month)(均为收音机类型)。现在我希望能够按 meta_key 日期和月份获取帖子。

除了带有 $meta_query 的部分之外,短代码有效。

以下是 shorеcode 的外观: [tribe_custom_events_list_mm_wed cat="Rodrigo" num="6" day="Monday" month="October"]

下面是负责短代码的代码,添加在functions.php中

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,
  );

  $day = $day;
  $month = $month;

  $meta_query = array(
    array(
      'key'   => 'event_day',
      'value' => '$day',
      'compare' => '='
    ),
    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' => array($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>';
  }

  echo '<pre>' , var_dump($meta_query) , '</pre>';

  wp_reset_postdata();

  return '<div>' . $output  . '</br>' . '</div>';
}
add_shortcode('tribe_custom_events_list_mm_wed', 'tribe_custom_events_shortcode');

【问题讨论】:

  • array($tax_query) 因为你以正确的格式声明,所以看起来你在这里有一个额外的数组。
  • @HowardE E - 嗨,我更新了我的代码。确实有一个额外的数组。我删除了它,但仍然没有显示任何帖子。
  • 还有你的元查询。我以为你在看其他东西时会意识到这一点。
  • @HowardE - 像这样更改了我的代码:` $args = array( 'post_type' => 'tribe_events', 'posts_per_page' => $num, 'order' => $order, 'orderby ' => $orderby, 'tax_query' => array($tax_query), 'meta_query' => array('relation' => 'AND', array('key' => 'event_day', 'value' => ' $day', 'compare' => '=' ), array( 'key' => 'event_month', 'value' => '$month', 'compare' => '=' ), ), ); ` OR 关系有效prnt.sc/1wep0tz .
  • 不适用于 OR 关系。奇怪的是,我将短代码参数设置为星期一,仍然显示具有不同值的帖子。即使没有元键遵守规则,帖子仍然会显示....

标签: wordpress advanced-custom-fields shortcode acfpro meta-query


【解决方案1】:

这应该适合你。您的代码中有一些错误...在下面的 cmets 中注明。

$tax_query = array(
    'taxonomy' => $taxonomy,
    'field'    => $field,
    'terms'    => $cat,
);

/* This is unnecessary since $day already = $day
  $day = $day;
  $month = $month;
*/

$meta_query = array(
    array(
        'key'   => 'event_day',
        'value' => $day, // Don't put quotes around variables
        'compare' => '='
    ),
    array(
        'key'   => 'event_month',
        'value' => $month,
        'compare' => '='
    ),
);

$args = array(
    'post_type'      => 'tribe_events',
    'posts_per_page' => $num,
    'order'          => $order,
    'orderby'        => $orderby,
    'tax_query' => $tax_query, // This is already an array defined above
    'meta_query' => $meta_query,
);

【讨论】:

  • 谢谢!我犯了一个愚蠢的错误。它现在可以工作了。
猜你喜欢
  • 1970-01-01
  • 2017-04-23
  • 2012-03-29
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 2018-07-17
  • 2017-03-05
  • 2018-07-15
相关资源
最近更新 更多