木材:从另一页访问高级自定义字段

时间:2016-04-18 21:17:52

标签: php wordpress wordpress-plugin twig timber

我正试图从另一个页面访问ACF数据,使用Timber(Twig)在另一个页面上显示。

“关于”页面(ID = 7)中的ACF名称为the_unstrung_hero

页-home.php:

<?php
$context = Timber::get_context();
$post = new TimberPost();
$about_page_id = 7;
$about = new TimberPost($about_page_id);
$about->acf = get_field_objects($about->ID);
$context['post'] = $post;
Timber::render( array( 'page-' . $post->post_name . '.twig', 'page.twig' ), $context );

在page-home.twig:

<p>{{ acf.the_unstrung_hero|print_r }}</p>

这只是许多人的最后一次尝试。坦率地说,我只是没有得到一些东西(PHP不是我的强项)...非常感谢你的帮助。

1 个答案:

答案 0 :(得分:4)

在上面的示例中,我看到您从about页面获取了字段数据,但您没有将其添加到上下文中。您的模板不显示该数据,因为您没有将其移交给模板。

首先设置上下文:

$context = Timber::get_context();

然后您将获得应显示的当前帖子数据:

$post = new TimberPost();

现在你加载了$post,但它还没有在你的上下文中。您必须将要在页面上显示的数据放入$context数组中。然后通过Timber::render( 'template.twig', $context )渲染它。您的Twig模板将只包含$context中存在的数据(要完成:您还可以使用Twig模板中的函数来获取数据,但这是另一个主题)。

要同时添加从about页面加载的数据,您必须执行以下操作:

$about_page_id = 7;
$about = new TimberPost( $about_page_id );
$context['about'] = $about;

看到行$about->acf = get_field_objects($about->ID)不再存在了吗?您不需要它,因为Timber会自动将您的ACF字段加载到帖子数据中。现在可以通过Twig模板中的{{ about.the_unstrung_hero }}访问您的字段。

回到你想要达到的目标:

我会这样解决。

在问题的评论中提及Deepak jha,我还会使用get_field()函数的第二个参数来通过帖子ID从帖子中获取字段数据。

如果您只想显示一个ACF字段的值,则实际上不需要加载about页面的整个帖子。

页-home.php

$context = Timber::get_context();
$post = new TimberPost();
$context['post'] = $post;

// Add ACF field data to context
$about_page_id = 7;
$context['the_unstrung_hero'] = get_field( 'the_unstrung_hero', $about_page_id );    

Timber::render( array( 'page-' . $post->post_name . '.twig', 'page.twig' ), $context );

然后在 page-home.twig 中,您可以在帖子中访问字段数据。

<p>{{ the_unstrung_hero }}</p>