WordPress联系人表单7自定义短代码

eulz3vhy  于 2023-03-17  发布在  WordPress
关注(0)|答案(6)|浏览(188)

联系表7有一些短代码,如[_date]可以获得今天的日期。但我想显示一周后的日期。
因此,我需要创建一个自定义的短代码联系表7,采取说[下周]和在收到的电子邮件中显示正确的日期。
在何处以及如何创建联系表单7的自定义短代码?

ni65a41a

ni65a41a1#

将以下内容添加到functions.php

wpcf7_add_shortcode('custom_date', 'wpcf7_custom_date_shortcode_handler', true);

function wpcf7_custom_date_shortcode_handler($tag) {
    if (!is_array($tag)) return '';

    $name = $tag['name'];
    if (empty($name)) return '';

    $next_week = date('Y-m-d', time() + (60*60*24*7)); 
    $html = '<input type="hidden" name="' . $name . '" value="' . $next_week . '" />';
    return $html;
}

现在,在CF7 GUI的“Form”字段中键入[custom_date next_week]
现在可以在消息正文中使用[next_week]

0x6upsns

0x6upsns2#

这对响应方来说有点晚了,但是当我想在我的表单和邮件正文中添加自定义短代码时,我总是看到这篇帖子。我希望能够插入短代码,而不需要在CF7中特别注册它们,并且通常只在邮件正文中注册(CF7似乎做不到这一点)。
下面是我最终的做法:

// Allow custom shortcodes in CF7 HTML form
add_filter( 'wpcf7_form_elements', 'dacrosby_do_shortcodes_wpcf7_form' );
function dacrosby_do_shortcodes_wpcf7_form( $form ) {
    $form = do_shortcode( $form );
    return $form;
}

// Allow custom shortcodes in CF7 mailed message body
add_filter( 'wpcf7_mail_components', 'dacrosby_do_shortcodes_wpcf7_mail_body', 10, 2 );
function dacrosby_do_shortcodes_wpcf7_mail_body( $components, $number ) {
    $components['body'] = do_shortcode( $components['body'] );
    return $components;
};

// Add shortcode normally as per WordPress API
add_shortcode('my_code', 'my_code_callback');
function my_code_callback($atts){
    extract(shortcode_atts(array(
        'foo' => 'bar'
    ), $atts));

    // do things
    return $foo;
}
s3fp2yjn

s3fp2yjn3#

CF 7中有两种类型的标记:* 表单标签 *(联系表单本身)和mail tags(电子邮件)-read more
1.自定义表单标记
要添加自定义表单标记,可以使用wpcf7_init操作挂钩(Read more)上的wpcf7_add_form_tag()函数。

  • 已接受答案中的wpcf7_add_shortcode()函数被视为已弃用,将被此函数取代。*

1.自定义邮件标记
我没有找到任何内置的功能来添加自定义邮件标签,但我相信有多种可能的解决办法:

  • 启用自定义短代码(不要忘记事先创建短代码处理程序):
  • 对于邮件组件,根据DACrosby的回答。
  • 对于整个邮件(所有组件),使用wpcf7_special_mail_tags筛选器:
function my_special_mail_tag( $output, $name, $html ) {
    if ( 'myshortcode' === $name ) {
        $output = do_shortcode( "[$name]" );
    }
    return $output;
}
add_filter( 'wpcf7_special_mail_tags', 'my_special_mail_tag', 10, 3 );

1.向表单中添加一个包含预填充数据的自定义隐藏表单标记,然后在邮件中使用它:[my-custom-form-tag-with-some-prepopulated-data];定制表单标签应注册到wpcf7_add_form_tag(),如上所述。

zu0ti5jz

zu0ti5jz4#

我的解决方案很简单。做任何你想要的简码,并把它放在联系人的形式领域。只是不要忘记做以下几点:在functions.php中只放置以下代码,您的短代码就可以工作:
add_filter('wpcf 7表格元素','do短代码');

cgvd09ve

cgvd09ve5#

在表单模板内启用短代码
溶液1-使用wpcf7_form_elements过滤器

使用wpcf7_form_elements过滤器,我们可以修改表单的HTML输出。由于输出将包含添加到表单模板中的短代码,因此我们需要做的只是将do_shortcode函数作为回调绑定到functions.php中的此过滤器,如下所示:

add_filter( 'wpcf7_form_elements', 'do_shortcode' );

解决方案2-使用Contact Form 7扩展插件

如果你对编辑functions.php文件感到不舒服,有一个Contact Form 7 Shortcode Enabler插件可以做同样的事情。

**注:**目前,插件最新更新是5年前,但插件只执行相同的代码行作为解决方案1,所以它应该仍然与WordPress的最新版本。
在邮件模板中启用短代码

wpcf7_special_mail_tags过滤器用于自定义Contact Form 7的form-tagsspecial tags的输出。幸运的是,此过滤器还检测在Mail Template中找到的自定义短代码,因此我们也可以使用此过滤器来处理这些短代码。
您需要在functions.php文件中添加以下代码:

function my_special_mail_tag( $output, $name, $html ) {
    if ( 'myshortcode' == $name )
        $output = do_shortcode( "[$name]" );
 
    return $output;
}
add_filter( 'wpcf7_special_mail_tags', 'my_special_mail_tag', 10, 3 );
ddarikpa

ddarikpa6#

我以前没有这样做过,但我认为短代码是由wordpress自己管理的(即使是CF7插件)。
创建简单短代码的示例如下:

//[foobar]
function foobar_func( $atts ){
 return "foo and bar";
}
add_shortcode( 'foobar', 'foobar_func' );

放置在functions.php中。
如需了解更多信息:http://codex.wordpress.org/Shortcode_API
或者你可以使用这样的插件来完成这项工作:http://wordpress.org/extend/plugins/shortbus/

相关问题