ACF get_field () не возвращает значение в WordPress - PullRequest
0 голосов
/ 06 июля 2019

Я использую ACF и CPT совместно.Я создал шорткод для размещения в текстовом модуле в моей теме.Это работает хорошо.Тем не менее, когда я вызываю ACF get_field(), он не возвращает никакого значения.Я попытался просмотреть этот вопрос , а также этот один , но ни один из них не работает.

Я дважды проверил имя поля ACF.Также пытался изменить тип ввода с текста на номер, но все еще без надежды.

Среда разработки

  • Версия WordPress: 5.2.2 (Последняя на данный момент)
  • Тема / Дочерняя версия Тема: Divi 3.25.3

Шорткод, который я создал:

  <?php
    add_shortcode('RESTAURANT_MENU', 'fetch_menu_products');
    function fetch_menu_products($atts)
    {
      $atts = shortcode_atts(array(
        'category_name' => ''
      ), $atts);
      $category_name = $atts['category_name'];

      $args = array(
        'category_name' => $category_name,
        'post_type' => 'menu',
        'numberposts' => -1,
        'post_status' => 'publish'
      );

      $output = '';
      $menu_products = get_posts($args);
      foreach ($menu_products as $menu_product) {
        setup_postdata($menu_product);
        $output .= '<section class="menu-item-wrapper">';
        $output .= '<h3 class="menu-item__title">' . $menu_product->post_title . '</h3>';
        $output .= '<div class="menu-item">';
        $output .= '<div class="menu-item-description">';
        $output .= '<p class="menu-item-description__text">' . $menu_product->post_content . '</p>';
        $output .= '</div>';
        $output .= '<ul class="menu-prices-list">';
        if (get_field("regular_size_price") || get_field("large_size_price")) {
          $output .= '<li class="menu-prices-list--item">R ' . get_field("regular_size_price", $menu_product->ID)  . ' Currency</li>';
          $output .= '<li class="menu-prices-list--item">L ' . get_field("large_size_price", $menu_product->ID) . ' Currency</li>';
        }
        if (get_field("price")) {
          $output .= '<li class="menu-prices-list--item">' . get_field("price", $menu_product->ID)  . ' Currency</li>';
        }
        $output .= '</ul>';
        $output .= '</div>';
        $output .= '</section>';
      }
      wp_reset_postdata();
      return $output;
    }

Может ли кто-нибудь помочь мне выяснить, почему это не так?это возвращает какое-либо значение, пожалуйста?Спасибо.

Обновление: Правила расположения ACF

ACF Location Rules

Ответы [ 2 ]

1 голос
/ 06 июля 2019

Попробуйте использовать get_post_meta() вместо get_field().Поскольку вы уже используете ACF, используйте этот код для получения значения из мета-сообщения

get_post_meta($menu_product->ID, 'regular_size_price')[0]

Для получения дополнительной информации по get_post_meta() вы можете проверить эту ссылку

0 голосов
/ 06 июля 2019

Если мое предположение верно, ваши элементы li не печатаются при возврате переменной $output. Так должно быть, поскольку вы используете функцию get_field вне theloop без передачи идентификатора записи в операторе if.

Ниже приведен исправленный код:

if (get_field("regular_size_price", $menu_product->ID) || get_field("large_size_price", $menu_product->ID)) {
    $output .= '<li class="menu-prices-list--item">R ' . get_field("regular_size_price", $menu_product->ID)  . ' Currency</li>';
    $output .= '<li class="menu-prices-list--item">L ' . get_field("large_size_price", $menu_product->ID) . ' Currency</li>';
}

Надеюсь, это поможет.

...