ACF自定义字段和Wordpress木材前端模板

ACF自定义字段和Wordpress木材前端模板,wordpress,advanced-custom-fields,timber,Wordpress,Advanced Custom Fields,Timber,我正在尝试在前端创建一个自定义表单,以便登录的访问者可以发布自己的内容 使用ACF pro和木材 在我的page.php文件中 $new_post = array( 'post_id' => 'new_post', 'post_title' => true, 'post_content' => true, 'field_groups' => array(26), // Create post field group ID(s) 'form' => true, 're

我正在尝试在前端创建一个自定义表单,以便登录的访问者可以发布自己的内容

使用ACF pro和木材

在我的page.php文件中

$new_post = array(
'post_id' => 'new_post',
'post_title' => true,
'post_content' => true,
'field_groups' => array(26), // Create post field group ID(s)
'form' => true,
'return' => '%post_url%', // Redirect to new post url
'html_before_fields' => '<div class="foobar">',
'html_after_fields' => '</div>',
'new_post' => array(
    'post_status' => 'draft',
    'post_type' => 'vlog'
),
'submit_value' => 'Create Post'
);

$context['vlogform'] = acf_form($new_post);
表单呈现-但它卡在一个愚蠢的地方,而不是我想要的地方。它卡在html元素上方

有什么建议吗

谢谢, 抢劫

**编辑**

这不管用

$context['vf_form'] = Timber\Helper::ob_function('acf_form', $new_post);
但这确实

ob_start();

acf_Form($new_post);

$context['vf_form'] = ob_get_clean();
实质上,有什么区别

谢谢,
Rob

问题是
acf\u表单
在PHP文件中调用时也会回显。您可以寻找替代函数(是否有类似于
get\u acf\u form
的函数返回HTML但不回显?)或使用Timber的输出缓冲区包装器:

$contect['vf_form'] = Timber\Helper::ob_function('acf_form', $new_post);

。。。这会将数据存储在
vf_form
属性中,但不会抑制其回声,直到在Twig中调用它。这可能有点晚了,但我已经通过使用他们最近添加的参数解决了这个问题。我在谷歌上找到了这个,所以对于未来的搜索者来说,这个可能会派上用场

因此,在args数组中,添加以下内容:

$args = array(

  'echo' => false,

);

因此,正如其他答案所提到的
acf_form()
在调用表单时输出表单

要防止表单在文档顶部呈现,请将表单参数从控制器(page.php)传递到视图

acf_form_head();
get_header();

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

$context['form_args'] = [
    'post_id' => 'new_post',
    'post_title' => true,
    'post_content' => true,
    'field_groups' => [26], // Create post field group ID(s)
    'form' => true,
    'return' => '%post_url%', // Redirect to new post url
    'html_before_fields' => '<div class="foobar">',
    'html_after_fields' => '</div>',
    'new_post' => [
        'post_status' => 'draft',
        'post_type' => 'vlog'
    ],
    'submit_value' => 'Create Post'
];


Timber::render('example-view.twig', $context);

get_footer();
src:

我使用的是最新的木材(via composer)和ACF Pro 5.9.1


在旧版本的Timber上,我利用了控制器中类似的助手方法(
TimberHelper::function
),该方法现在已被弃用

谢谢。我已经看过了,没有get_acf_表单或类似的表单,所以尝试了缓冲区包装器。不幸的是,这似乎不会将任何ACF表单呈现给页面。我已经检查了我的控制台,没有任何错误-所有的acf样式表/javascript内容也没有出现。从acf pro 5.7.10开始,我再也找不到这个功能了。是的,只是确认它不起作用<代码>观察开始解决方案工作正常。
acf_form_head();
get_header();

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

$context['form_args'] = [
    'post_id' => 'new_post',
    'post_title' => true,
    'post_content' => true,
    'field_groups' => [26], // Create post field group ID(s)
    'form' => true,
    'return' => '%post_url%', // Redirect to new post url
    'html_before_fields' => '<div class="foobar">',
    'html_after_fields' => '</div>',
    'new_post' => [
        'post_status' => 'draft',
        'post_type' => 'vlog'
    ],
    'submit_value' => 'Create Post'
];


Timber::render('example-view.twig', $context);

get_footer();
{{ function('acf_form', form_args) }}