将带有木枝的帖子添加到包含中

时间:2018-02-12 17:29:29

标签: wordpress twig timber

在单个页面上,我需要在页面底部添加一个包含添加3个项目的包含。

我有一个名为“我用ACF制作的项目”的内容类型。

单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);

问题

我有两个问题:

  • 项目未显示在单页中。我做了什么 错误?
  • 我可以选择3个项目,除了显示在上面的项目 单页?

谢谢

3 个答案:

答案 0 :(得分:0)

你已经包含了twig模板,但没有向他发送数据。您的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');

答案 1 :(得分:0)

这就是我所做的。

<强>单project.php

我创建了一个单项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);

<强>单project.twig

在我的single-project.twig上,我有获取php页面结果的代码。实际上,该代码包含在&#34; inc-related.twig&#34;页。它有效!

{% 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以获取来自&#34; related_project&#34;和ACF领域?

答案 2 :(得分:0)

我不知道还有谁想要这个,但是我想扩展Maxim S的答案,并回答filnug(OP)关于避免与帖子冲突的问题。

  1. OP希望在单个页面中添加一个附加的ACF上下文。这可以通过使用get_posts function
  2. 向$ context添加新条目来完成。

single-project.php

$context['related_posts'] = Timber::get_posts('post_type=project&posts_per_page=3');
  1. OP希望在单个模板中使用新的ACF。 Twig发送active context by default,因此此代码保持原样。
{% block related %}
  {% include 'inc-related.twig' %}
{% endblock %}
  1. 最后,要在inc-related.twig模板中使用新的ACF,请使用在步骤1中为$ context指定的名称进行for循环;但是,我们不使用“发布”来引用每个项目。而是将其命名为“ rel_post”或类似名称。
{% for rel_post in related_posts %}
  {% if rel_post.thumbnail %}
    ...
  {% endif %}
{% endfor %}