twig - 如何使用 Timber & ACF 显示特定的相关帖子?
问题描述
我目前是 Timber 的新手。
这是代码:
视图.twig
{# mobile related list #}
{% if related %}
<div class="hide-for-large">
{% include 'project/_related-list.twig' %}
</div>
{% endif %}
{% endblock %}
_related-list.twig
<aside class="related-projects">
<h2 class="related-projects__header">Related {{plural_post_type|default('Projects')}}</h2>
<ul>
{% for post in related %}
<li class="related-projects__thumb tease--{{post.post_type}} tease tease--caption tease--show-caption-on-hover tease--show-overlay-on-hover tease--has-overlay">
{% include 'partials/tease.twig' %}
</li>
{% endfor %}
</ul>
</aside>
逗弄.twig
<a href="{{post.link}}" class="tease__wrap">
{% block content %}
<div class="tease__caption">
<h3 class="tease__title">
{{post.title}}
</h3>
</div>
{% if post.get_thumbnail %}
<img class="tease__thumb b-lazy" data-object-fit="cover" data-pin-nopin="true" data-srcset="{{post.thumbnail.srcset}}" data-src="{{post.thumbnail.src('large')}}" sizes="(min-width: 64em) 25vw, 100vw" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" />
{% else %}
<img class="tease__thumb" src="{{theme.link}}/assets/img/ph-800x535.png">
{% endif %}
{% endblock %}
</a>
当前设置随机显示相关帖子。如何更改此项以显示所选的相关帖子?
解决方案
我不明白你的specific-related-posts
领域和related_posts
领域之间的区别。我假设默认情况下您会获得 3 个随机相关的帖子,但是当related_posts
在 ACF 字段中设置任意数量时,您会希望以特定顺序首先包含它们。
首先,我会从该related_posts
字段中获取帖子 ID 数组。如果您已选择帖子对象作为返回值,我会在您的字段组设置中仅选择对象 ID 作为返回值。
$related = $post->meta( 'related_posts' );
然后,我们将它们转换为 Timber 帖子。
$related_posts = Timber::get_posts( $related );
然后,您将以某种方式构建您的查询
- 不包括已选择的帖子。
- 用随机帖子填充其余帖子。
// Run additional query only if we don’t already have enough posts.
if ( count( $related ) < 3 ) {
$args = array(
'post_type' => $post->post_type,
'posts_per_page' => 3 - count( $related ),
'orderby' => 'rand',
'post__not_in' => array( $post->ID ),
'tax_query' => $tax_query,
);
// Append additional posts to already existing Timber posts array.
$related_posts = array_merge(
$related_posts,
Timber::get_posts( $args )
);
}
$context['related'] = $related_posts;
现在,我们实际上正在运行两个查询。首先,当我们将帖子 ID 从转换related_posts
为 Timber 帖子时,然后当我们获得随机帖子时再次转换。我们通常希望避免这种情况。您可以使用该post__in
参数在一个查询中运行它。但在您的情况下,您还rand
用于订购,这会混淆您在 ACF 字段中选择的订单。只要您没有遇到性能问题,我就不会在这种特殊情况下运行两个查询。
推荐阅读
- c++ - 将 string* 分配给 char* c++
- machine-learning - 如何检查新数据的深度嵌入式聚类?
- javascript - 如何在移动设备上通过触摸左右制作这张幻灯片?
- java - 如何在Android上对同一代码设置两个权限
- arrays - 组合数组以获取哈希数组
- c# - IndexOutOfRangeException:尝试访问 GameObject 数组时,数组索引超出范围?
- postgresql - ORDER BY 会影响多个 WHERE 条件吗?
- android - Unity VR 场景到 2D 场景
- c - 如何从C中的单个文件中提取多个字符串
- java - Spring cloud netflix eureka server - 启动时出现tomcat错误