Добавить сообщения с деревянными прутьями во включенное

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

У меня есть тип контента, называемый проектами, которые я создал с помощью ACF.

single-project.twig

У меня есть страница single-project.twig, на которой отображается содержание сообщения (которое также является проектом). Внизу страницы мне нужно добавить такой блок:

{% block related %}
  {% include 'inc-related.twig' %}
{% endblock %}

inc-related.twig

В "inc-related.twig" у меня есть это:

{% for post in related_posts %}
  {% if post.thumbnail %}
    <a href="{{post.link}}" class="l-basicgrid-work work">
      <article>
        <figure>
          <img data-src="{{post.get_thumbnail.src('medium_large')|resize(800, 533)}}" alt="{{post.title}}" class="lazy">
        </figure>
        <figcaption>
          <h2>{{ post.title }}</h2>
        </figcaption>
      </article>
    </a>
  {% endif %}
{% endfor %}

related.php

Я также создаю страницу «related.php», на которой интегрирован следующий рендеринг:

$context = Timber::get_context();
$context['related_posts'] = Timber::get_posts('post_type=project&posts_per_page=3');
Timber::render('inc-related.twig', $context);

Вопросы

У меня 2 вопроса:

  • Проект не отображается на одной странице. Что я сделал не так?
  • Могу ли я выбрать 3 проекта, кроме того, который отображается на одной странице
    ?

Спасибо


person filnug    schedule 12.02.2018    source источник


Ответы (3)


вы включили шаблон веточки, но не отправили ему данные. Ваш related.php не включается автоматически. Вы должны написать $context['related_posts'] = Timber::get_posts('post_type=project&posts_per_page=3'); в своем single-project.twig. И не используйте имя post в inc-related.twig. Может противоречить текущему объекту записи.

К single-project.php добавить $context['related_posts'] = Timber::get_posts('post_type=project&posts_per_page=3');

person Maxim Sarandi    schedule 12.02.2018
comment
Спасибо. Теперь логичнее поместить его в single-project.php. Но теперь, как вы думали, возник конфликт с текущим объектом поста. Что делать, чтобы избежать конфликта? - person filnug; 13.02.2018

Вот что я сделал.

single-project.php

Я создал страницу single-project.php. Он содержит следующий сценарий:

$context = Timber::get_context();

$args = array(
    // Get post type project
    'post_type' => 'project',
    // Get 3 posts
    'posts_per_page' => 3,
    // Order random
    'orderby' => 'rand',
);

$context['related_posts'] = Timber::get_posts( $args );
Timber::render('single-project.twig', $context);

single-project.twig

На моем single-project.twig у меня есть код, который получает результат страницы php. Фактически, этот код включен на страницу inc-related.twig. И это работает!

{% for post in related_posts %}
                    {% if post.thumbnail %}
                        <a href="{{post.link}}" class="l-basicgrid-work work">
                            <article>
                                <figure>
                                    <img data-src="{{post.get_thumbnail.src('medium_large')|resize(800, 533)}}" alt="{{post.title}}" class="lazy">
                                </figure>
                                <figcaption>
                                    <h2>{{ post.title }}</h2>
                                </figcaption>
                            </article>
                        </a>
                    {% endif %}
                {% endfor %}

Но на той же странице (single-project.twig) у меня также есть данные, отображающие контент из расширенного настраиваемого поля.

                    {% if post.project_images %}
                        {% for item in post.get_field('project_images') %}  
                            <figure class="{{item.project_media_css}}">
                                <img data-src="{{TimberImage(item.project_media).src}}" alt="{{item.alt_media}}" class="lazy">
                            </figure>  
                        {% endfor %}
                    {% endif %} 

Проблема в том, что поле ACF ничего не возвращает.

Как мне изменить single-project.php для получения содержимого из поля «related_project» и ACF?

person filnug    schedule 13.02.2018

Я не знаю, кому еще это может понадобиться, но я хотел бы расширить ответ Максима S и ответить на вопрос Филнуга (OP) об избежании конфликта с постом.

  1. OP хотел добавить дополнительный контекст ACF на одну страницу. Это делается путем добавления новой записи в $ context с помощью функции get_posts.

single-project.php

$context['related_posts'] = Timber::get_posts('post_type=project&posts_per_page=3');
  1. OP хотел использовать новый ACF в едином шаблоне. Twig отправляет активный контекст по умолчанию, поэтому этот код в порядке как есть.
{% block related %}
  {% include 'inc-related.twig' %}
{% endblock %}
  1. Наконец, чтобы использовать новую ACF в шаблоне inc-related.twig, имя, данное $ context на шаге 1, используется для создания цикла for; однако мы не используем публикацию для ссылки на каждый элемент. Вместо этого назовите его rel_post или подобное.
{% for rel_post in related_posts %}
  {% if rel_post.thumbnail %}
    ...
  {% endif %}
{% endfor %}
person Hannah    schedule 16.12.2020