Повторитель ACF в таксономии (категории) не работает - PullRequest
0 голосов
/ 05 августа 2020

В категории таксономии у меня есть:

Повторяющееся поле с именем вопросы . Внутри ретранслятора у меня есть поле с именем answer .

Я пытаюсь показать все ответы в категории. php файл выглядит следующим образом:

$term = get_queried_object();

if ( have_rows( 'questions',   $term ) ) {
    while( have_rows( 'questions',   $term ) ) {
        the_row();
        the_sub_field( 'answer' );
    }
}

Это не не работает. Подскажите, пожалуйста, что здесь не так? Я часами пытался заставить его работать.

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Я наконец разобрался. Я проверил в phpmyadmin, где хранятся данные. Оказалось, что данные сохраняются в wp_termmeta, а не в wp_postmeta, как я думал. Вот почему большинство решений не сработало.

Рабочий код обхода для повторителя, добавленного в таксономию (категория в моем примере) с использованием get_term_meta вместо кода ACF (циклы и функции).

<?php
  // name of repeater field
  $repeater = 'questions'; 

  // get taxonomy id
  $taxonomy_id = get_queried_object_id(); 

  // get repeater data from term meta
  $post_meta = get_term_meta($taxonomy_id, $repeater, true);

  // count items in repeater
  $count = intval(get_term_meta($taxonomy_id, $repeater, true));

  // loop + apply filter the_content to preserve html formatting
  for ($i=0; $i<$count; $i++) {
      echo apply_filters('the_content', get_term_meta($taxonomy_id, $repeater.'_'.$i.'_'.'title', true));
      echo apply_filters('the_content', get_term_meta($taxonomy_id, $repeater.'_'.$i.'_'.'answer', true));
    }
  ?>

Решение из документации по-прежнему не работает для повторителей в таксономии. Это работает для неповторяющихся (например, изображения, текста, добавленного в таксономию). https://www.advancedcustomfields.com/resources/adding-fields-taxonomy-term/

0 голосов
/ 05 августа 2020

Вы пробовали вместо этого перебирать свое поле в виде массива? Часто это проще, особенно если вы получаете поля, не являющиеся частью глобального $ post. Вместо этого ваша установка будет выглядеть так:

$questions = get_field( 'questions', $term );
foreach( $questions as $question ){
    echo $question[ 'answer' ];
}

Я считаю, что это намного проще. Я предполагаю, что ваша проблема выше связана с тем, что the_row () не получает глобальный l oop должным образом, потому что вы обращаетесь к полям $ term, но я не уверен. В любом случае - код выше должен работать.

...