gpt4 book ai didi

php - 获取(并显示)匹配 ACF 关系字段的其他帖子

转载 作者:行者123 更新时间:2023-12-05 08:11:20 26 4
gpt4 key购买 nike

我有一个名为 products 的 ACF relationship 字段。此字段存在于名为 resources 的自定义帖子类型中。

resources 中,我有三个博客,标题为:

  • 博客 1
  • 博客 2
  • 博客 3

博客 1products 字段设置为“Premium”。 博客 2 也将此字段设置为“高级”。

博客 3products 字段设置为“Common”。

我制作了一个自定义模块,用于展示“相关产品”(具有匹配产品 的博客)。例如,如果我在博客 1 上,由于 products 字段匹配(它们都设置为“高级”)。

如果我在博客 3 上,我希望什么也看不到,因为不存在具有 products 值的其他帖子。

目前,在我的自定义模块(称为“相关产品”以供引用)中,我有以下代码:

$posts = get_field('products');

if( $posts ):

foreach( $posts as $post):
the_title();
endforeach;

endif;

现在,我在博客 1 和“相关产品”模块中,我看到:Premium 打印一次。

它显然是在提取数据,但我认为这仅适用于当前帖子(它显示的是 blog 1product 数据)。我通过将 Blog 3 上的 products 更改为“Premium”对此进行了测试,结果在页面上仍然相同,只是在帖子上打印了一次“Premium”。

我想要实现的目标:

  • 获取属于相同产品类型的其他帖子。
  • 从这些其他帖子中提取数据(我想获取那些帖子标题并显示它们)。

最佳答案

get_field('products') 将从当前帖子中获取 products 字段,因此您得到的是预期的输出。

如果您想要显示在其 products 字段中具有相同值的所有其他帖子,您需要获取所有帖子并比较它们的 products 字段;

$thisPostsProductsField = get_field('products');
$allPosts = get_posts([
'post_type' => 'resources',
'numberposts' => -1,
'post__not_in' => [get_the_ID()] # NOTE: Ignore the post we're on
]);
$relatedPosts = [];

foreach ($allPosts as $aPost) {
$aPostsProductField = get_field('products', $aField->ID); # NOTE: The second argument to get_field() specifies from where to fetch the field, it defaults to the current post ID

if ($aPostsProductField === $thisPostsProductsField) {
$relatedPosts[] = $aPost;
}
}

# $relatedPosts should now contain other posts of type "resources" that have the same "products" field
foreach ($relatedPosts as $post) {
setup_postdata($post);

the_title();
the_content();
the_post_thumbnail();
}

wp_reset_postdata();

我假设您已将产品 关系字段限制为一个 帖子?否则你也需要循环字段值,你还需要决定一个帖子是否足够有原始帖子的产品一个或者它是否需要有所有 个原始帖子的产品。

编辑:您可以改用 meta_query 来避免获取每个帖子并比较它们的字段;

$relatedPosts = get_posts([
'post_type' => 'resources',
'meta_query' => [
[
'key' => 'products',
'value' => $thisPostsProductsField->ID,
'compare' => '='
]
]
]);

但这取决于ACF如何存储products字段。

关于php - 获取(并显示)匹配 ACF 关系字段的其他帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60542269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com