Вложенный flexcontent с использованием полей Wordpress ACF - PullRequest
0 голосов
/ 21 апреля 2020

Я использую flexcontent ACF, однако, чтобы позволить пользователю добавлять различные типы контента в одну строку, я вложил в него больше элементов flexcontent.

Цель для конечного пользователя: возможность добавить текст или изображение, и перетащить их, чтобы решить порядок.

У меня есть другие типы flexcontent для изображений, видео, текста и т. д. c. Они работают нормально.

Структура моих полей ACF:

--text
--image etc (all other flexcontent blocks)

--content_mixed = flexcontent
----column = flexcontent
--------text= flexcontent
----------------text (text field)
--------image=flexcontent
----------------imagegroup (group)
--------------------------------image
--------------------------------caption

Мой код:

{% set flexcontent == post.get_field('flexcontent')%}
{% if flexcontent %}
{% for item in flexcontent %}
{% if item.acf_fc_layout == 'text' %}
{% elseif item.acf_fc_layout == 'images' %}
//images
{% elseif item.acf_fc_layout == 'content_mixed' %}
   // text + image, this shows up
    {% for subitem in post.subitem.get_field('column') %}
        {% if subsubitem.acf_fc_layout == 'text' %}
            //text
        {% endif %}
        {% if subsubitem.acf_fc_layout == 'imagegroup' %}
          // image
         //image caption etc
        {% endif %}
        {% endfor %}
{% endif %}
{% endfor %}
{% endif %}

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

print_r для {{item.column}} (внутри первого поля flexcontent, "content_mixed") равно

   Array
(
    [0] => Array
        (
            [acf_fc_layout] => text
            [text] => 
Lorem Ipsum doret sit amet



        )

    [1] => Array
        (
            [acf_fc_layout] => image
            [imagegroup] => Array


       (
                [image] => Array ( 
       //all image info
   )

1 Ответ

0 голосов
/ 29 апреля 2020

Ваш print_r говорит вам, что item - это массив массивов. Так что вместо этого вы можете просто l oop:

    {% for subitem in item.column %}
        {% if subsubitem.acf_fc_layout == 'text' %}
            //text
        {% endif %}
        // etc.
    {% endfor %}

Как указано в комментариях, ваш цепной вызов post.subitem.get_field() не будет делать то, что вы ожидаете.

Кстати, вы не нужно проверять if flexcontent перед тем, как l oop. Twig очень терпимо относится к пустым значениям и просто игнорирует попытки l oop over null, false, et c. Меньше вложенности намного легче читать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...