使用高级自定义字段和联系表单7来显示表单

时间:2013-01-17 19:10:21

标签: php wordpress contact-form

我希望我的用户能够将Contact Form 7短代码放入Wordpress编辑器中的自定义字段中。我已经使用ACF创建了自定义字段,我可以将值拉到页面上,但是当我尝试将其包含在短代码中时,它会返回404.

此代码:

<?php echo do_shortcode(get_field('contact_form_shortcode')); ?>

返回:

[contact-form-7 404 "Not Found"]

如果我在这个值之外创建一个变量:

<?php
 $formCode = get_field('contact_form_shortcode');
 echo $formCode;
?> 

echo返回:

[contact-form-7 id="473" title="Learn More Form"]

但是在将该值放入echo do_shortcode函数列表后,我得到了相同的404:

<?php echo do_shortcode($formCode); ?>

我错过了什么?

7 个答案:

答案 0 :(得分:3)

  

使用ACF pro插件并且不使用其他额外插件。

  1. 创建关系字段(例如:contact_form
  2. 将以下代码添加到您的页面循环中:

    <?php $posts = get_field('contact_form');
       if( $posts ): 
         foreach( $posts as $p ): // variable must NOT be called $post (IMPORTANT) 
           $cf7_id= $p->ID;
           echo do_shortcode( '[contact-form-7 id="'.$cf7_id.'" ]' ); 
         endforeach;
       endif; ?>
    
  3. Create ACF relation field

答案 1 :(得分:2)

我能够使用上面评论中讨论的技术来解决这个问题。通过使用WYSWIG字段设置为'运行过滤器'the_content“'我能够以我想要的方式提取字段值。唯一的缺点是除了表单短代码之外,用户还可以在其中键入其他内容。

这是我的最终代码:

<?php
    if (get_field('contact_form_shortcode')):
        echo get_field('contact_form_shortcode');
    else:
        echo do_shortcode('[contact-form-7 id="473" title="Learn More Form"]');
    endif; 
 ?>

答案 2 :(得分:2)

您可以在字段的“格式设置”下将“文本”字段设置为“将HTML转换为标记”,而不是使用WYSIWYG字段。这将停止来自CF7的404错误并正确处理表单。 WYSIWYG字段往往难以控制用户输入不良。

答案 3 :(得分:1)

另一种解决方案:

1)安装https://github.com/taylormsj/acf-cf7

安装

> 1 Copy the acf-cf7 folder into your wp-content/plugins folder
> 2 Activate the Contact Form 7 plugin via the plugins admin page
> 3 Create a new field via ACF and select the Contact Form 7 type
> 4 Please refer to the description for more info regarding the field type settings

2)将以下代码插入模板:

            <?php if( get_field('field_acf') ):
                 the_field('field_acf');
            endif; ?>

这适用于在模式或弹出中创建联系表单7,在同一页面上创建多个表单。

答案 4 :(得分:0)

要按照您的要求将CF7短代码(或任何其他生成的短代码)粘贴到ACF字段中,只需使用@armadadrive解决方案,这正是所要解决的问题并且有效。

  1. 使用某些名称创建ACF print (df4.groupby('Name')['X'].transform(lambda x: x.fillna(x.std(ddof=0)))) 0 0.000000 1 0.500000 2 1.000000 3 0.408248 4 1.000000 5 0.000000 6 1.000000 Name: X, dtype: float64 字段,例如text
  2. 将您的hero_form粘贴到其中
  3. 像这样shortcode
  4. 显示内容

感谢@armadadrive

答案 5 :(得分:0)

这是我的解决方法:

创建一个“帖子对象”类型字段,该字段将返回帖子ID。 ,此字段的按帖子类型过滤应设置为“联系表格”,并且按分类法过滤为空。

然后进入页面模板:(php)

<?php $contact_form = get_field('contact_form'); ?>

HTML:

<div class="col-12 col-md-8 offset-md-2">
  <?php echo do_shortcode('[contact-form-7 id="'. $contact_form .'"]'); ?>
</div>

acf field screenshot

答案 6 :(得分:0)

在这里您可以尝试检查以下短代码的代码:

<?php echo do_shortcode(get_field('YourACFfieldNameHere')); ?>

我在我的网站上试过了,效果很好。