Поле связи WP ACF, возвращающее пустой массив в файле functions.php - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь создать массив в моем файле wp functions.php, в котором ключом является конструктор, а в качестве значения - все их продукты. В настоящее время поле отношения acf используется на странице продукта для ссылки на страницу дизайнера. Это код, который я пробовал до сих пор. Он работает без проблем, когда помещается в мой файл header.php, но когда я помещаю этот блок кода в файл functions.php, он не работает, потому что get_field ('designer_products') возвращает либо пустой массив, либо пустую строку, но не массив с объектом каждого дизайнера wp_post, как это должно быть.

$argsT = array('post_type' =>'product', 'orderby' => 'rand', 'order' => 'ASC');
$loopT = new WP_Query($argsT);
$allDesigners = array();
if ($loopT->have_posts()) {
  while ($loopT->have_posts()) {
    $loopT -> the_post();
    $thisProduct = get_the_title();
    $designerPosts = get_field('designer_product');
    foreach ($designerPosts as $designerPost) {
      $thisDesigner = $designerPost->post_title;
      if ($allDesigners[$thisDesigner]){
        $allDesigners[$thisDesigner] .= " " . $thisProduct;
      } else {
        $allDesigners[$thisDesigner] = $thisProduct;
      }
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

В случае, если кто-нибудь найдет это в будущем, я в итоге заставил его работать, обернув свой код в функцию, которая возвращает массив, а затем вызвав функцию позже и установив ее равной переменной. Ранее я просто пытался запустить код сразу, но, похоже, из-за порядка, в котором wp загружает файл functions.php, сообщения не могли иметь доступную информацию при вызове цикла.

0 голосов
/ 14 сентября 2018

За пределами «одного» шаблона страницы / публикации функция get_field не знает, на какую публикацию ссылаться. Вы должны попробовать передать идентификатор сообщения в качестве второго параметра функции get_field.

См. Мои правки ниже (обновлено):

$loopT = new WP_Query(array('post_type' =>'product', 'orderby' => 'rand', 'order' => 'ASC'));
$allDesigners = array();

if (!empty($loopT->posts)) {
    foreach ($loopT->posts as $product) {
        $product_title = $product->post_title;
        $designer_product = get_field('designer_product', $product->ID);

        foreach ($designer_product as $item) {
            $designer = $item->post_title;

            if ($allDesigners[$designer]){
                $allDesigners[$designer] .= " " . $product_title;
            } else {
                $allDesigners[$designer] = $product_title;
            }
        }
    }
}

Ознакомьтесь с официальной документацией ACF для get_field () для получения более подробной информации о том, как это работает.

...