我很难找出这段代码的错误。
What I\'m trying to do: 使用ACF插件在admin中设置一个自定义字段,在所有页面的元框中列出一个推荐列表(自定义帖子类型)。从下拉菜单中,客户可以选择将显示在该特定页面上的推荐信。
我正在使用一个稍微修改过的Twenty12主题版本,这是我在首页模板中使用的代码。
The code:
<?php $featured_testimonial = get_field(\'testimonial\', $post_object->ID); ?>
<?php foreach ($featured_testimonial as $post_object): ?>
<a href="<?php echo get_permalink($post_object->ID); ?>">
<p class="descr"><?php echo get_the_title($post_object->ID) ?></p>
</a>
<?php endforeach; ?>
The problem: 此代码在首页上没有显示任何内容。我做了一个
print_r( $post_object )
它显示了我推荐信中的所有信息(标题、日期、内容等)。
The solution: 在过去的两三天里,我一直在ACF支持论坛上寻求答案,以下是我得到的回复:
post对象字段将返回post对象,而不是HTML。在post\\u对象字段上使用\\u字段将导致不显示任何内容。
您需要将其存储为变量,然后使用ID或post\\u title变量输出所需的HTML
我是否不理解解决方案,或者我实际上在做信息所说的事情,而问题在其他地方?
Later edit: 这是我目前在ACF中对推荐字段的设置:
Rules: Post Types - Page.
Field Name - Testimonial.
Field Type: Post Object.
Post type: Testimonial.
Filter from taxonomy: All.
“规则”意味着自定义字段将只出现在页面上,并且它将只列出“推荐”自定义帖子类型中的“帖子对象”。在管理方面,一切似乎都很好,只是我无法在前端显示任何内容。
Final edit: 根据@s1lv3r的建议,我将字段类型从“post object”更改为“relationship”。我还修改了如下代码:
<?php $posts = get_field(\'testimonial\'); ?>
<?php if( $posts ): ?>
<?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
<?php setup_postdata($post); ?>
<?php echo get_the_excerpt(); ?>... <a href="<?php the_permalink(); ?>">+More</a>
<?php the_title(); ?>
<?php endforeach; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
现在前端一切正常。谢谢大家的帮助。
SO网友:s1lv3r
代码一开始似乎没有语法错误。您使用的字段类型是什么?关系
还有,为什么要覆盖$post_object
它首先来自哪里?缺少该部分代码。
要获取附加到当前帖子的字段(在您正在查看的当前循环/全局$post对象内),只需使用get_field(\'testimonial\')
没有ID参数。
如果要将字段附加到另一个post\\u对象,是否检查了$post_object->ID
在您发布的第一行之前包含有效的post\\u id?
Edited according to new info:
这是启用了“多个”选项的post对象字段吗?文档(http://www.advancedcustomfields.com/resources/field-types/post-object/) 假设此字段仅在启用多个选项时返回一个post对象数组,否则它将仅返回一个post对象。这意味着您不需要在代码中使用foreach循环。在这种情况下,您应该这样使用它:
<?php $featured_testimonial = get_field(\'testimonial\', $post_object->ID); ?>
<a href="<?php echo get_permalink($featured_testimonial->ID); ?>">
<p class="descr"><?php echo get_the_title($featured_testimonial->ID) ?></p>
</a>