【问题标题】:Add custom field inside a do_shortcode在 do_shortcode 中添加自定义字段
【发布时间】:2020-03-24 00:25:33
【问题描述】:

我正在尝试使用联系表单 7 将联系表单添加到页面模板中。但是,我希望目标电子邮件来自我创建的自定义字段。

拉取自定义字段数据的代码是这样的:

<?php the_field('website_address'); ?>

让我在模板级别选择目标电子邮件的简码是:

<?php echo do_shortcode('[contact-form-7 id="123" title="Contact Form" destination-email="xxxxxx@example.com"]'); ?>

所以我需要将 website_address 添加到简码中。我尝试了以下方法:

<?php echo do_shortcode('[contact-form-7 id="123" title="Contact Form" destination-email="<?php the_field('website_address'); ?>"]'); ?>

但它在 PHP 标签内有一个 PHP 标签,所以它不起作用......

所以我尝试了这些:

<?php echo do_shortcode('[contact-form-7 id="123" title="Contact Form" destination-email="the_field('website_address')"]'); ?>

<?php echo do_shortcode('[contact-form-7 id="123" title="Contact Form" destination-email="get_field('website_address')"]'); ?>

<?php echo do_shortcode('[contact-form-7 id="123" title="Contact Form" destination-email=".get_field('website_address')."]'); ?>

<?php echo do_shortcode('[contact-form-7 id="123" title="Contact Form" destination-email="'.get_field('website_address').'"]'); ?>

其中没有一个工作正常,有些甚至破坏了页面。

我正在努力寻找答案,所以想知道是否有人可以启发我 - 我什至可能以错误的方式思考这一切!非常感谢您的关注:)

编辑

我需要包含一个已添加到 functions.php 的函数,但它仍然没有帮助...

add_filter( 'shortcode_atts_wpcf7', 'custom_shortcode_atts_wpcf7_filter', 10, 3 );

function custom_shortcode_atts_wpcf7_filter( $out, $pairs, $atts ) {
  $my_attr = 'destination-email';

  if ( isset( $atts[$my_attr] ) ) {
    $out[$my_attr] = $atts[$my_attr];
  }

  return $out;
}

来自页面:https://contactform7.com/getting-default-values-from-shortcode-attributes/

【问题讨论】:

  • 你试过
  • 从技术上讲,你的最后一个应该也可以工作。
  • 问题在于,即使您传递了自己的属性,Contact Form 7 也不知道如何处理它,除非您将该字段添加到表单中。你有destination-email 字段吗?
  • get_field('website_address') 这是一个常数,还是特定于您的表单出现的每个页面?你能解释一下这将如何返回吗?
  • 如果你想这样做,你可以用 Ajax 传递它。

标签: php wordpress advanced-custom-fields shortcode contact-form-7


【解决方案1】:

好的,我找到了一种方法,如下所述:https://wordpress.org/support/topic/getting-emaip-recipient-from-shortcode/

  1. 在页面中添加带有目标电子邮件的短代码或发布您要显示表单的位置:

    [contact-form-7 id="123" title="联系表格" destination-email="xxxxxx@example.com"]

  2. 将以下代码添加到主题functions.php 或您的自定义插件中。

    add_filter('shortcode_atts_wpcf7', 'custom_shortcode_atts_wpcf7_filter', 10, 3); 功能 custom_shortcode_atts_wpcf7_filter($out, $pairs, $atts) { $my_attr = '目标邮箱'; if ( isset( $atts[$my_attr] ) ) { $out[$my_attr] = $atts[$my_attr]; } 返回 $out;

} 3. 将此代码添加到表单选项卡:

[email* destination-email default:shortcode_attr]

//如果你想隐藏这个字段,你可以使用这个代码:

[hidden destination-email default:shortcode_attr]
  1. 在 cforms7 邮件选项卡的“收件人”字段中添加代码 [destination-email]。

如果您使用隐藏字段,它将显示“无效邮箱语法”错误,但在我的情况下,我可以忽略它,因为它有效。

如果带有隐藏字段的收件人字段不起作用,您可以将 id 添加到电子邮件短代码中:

[email* destination-email default:shortcode_attr id:hidefield]

并用 css 隐藏字段:

#hidefield {
    display: none;
}

然后我就用了这个:

<?php echo do_shortcode('[contact-form-7 id="123" title="Contact Form" destination-email="'.get_field('email_address').'"]'); ?>

从自定义帖子类型中添加电子邮件地址:)

感谢所有回答的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多