2

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

使用 ACF pro 和 Timber。

在我的 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);

在 page.twig 中,我放置了

{{vlogform}}

表单呈现 - 但它卡在一个愚蠢的地方,而不是我想要的地方。它卡在html元素之上......

任何指针?

谢谢,罗伯

** 编辑 **

这不起作用

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

但这确实...

ob_start();

acf_Form($new_post);

$context['vf_form'] = ob_get_clean();

在物质上,有什么区别?

谢谢,罗伯

4

3 回答 3

2

这可能有点晚了,但我已经设法通过使用他们最近添加的参数解决了这个问题。我发现这个谷歌搜索它,所以对于未来的寻求者来说,这可能会派上用场。

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

$args = array(

  'echo' => false,

);
于 2017-11-24T15:56:32.667 回答
2

因此,正如其他答案提到的那样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();

然后在你看来,使用木材function()辅助方法来调用acf_form()

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

源代码:https ://timber.github.io/docs/guides/functions/#function

我正在使用最新的 Timber(通过 composer)和 ACF Pro 5.9.1

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

于 2020-09-23T19:29:32.430 回答
0

问题是acf_form在 PHP 文件中调用时也会回显。您可以寻找替代功能(是否有类似get_acf_form的东西返回 HTML 但不回显?)或使用 Timber 的输出缓冲区包装器:

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

...这会将数据存储在vf_form属性中,但不会抑制它的回显,直到在 Twig 中调用

于 2017-02-10T17:19:12.283 回答