Wordpress联系表格7个自定义短代码

时间:2012-11-01 14:37:47

标签: wordpress shortcode contact-form-7

联系表格7有一些短代码,比如[_date]来获取今天的日期。但我想在一周后显示日期。

因此,我需要为联系表单7创建一个自定义短代码,其中显示[next_week],并在已收到的电子邮件中显示正确的日期。

我在何处以及如何为联系表单7创建自定义短代码?

5 个答案:

答案 0 :(得分:15)

将以下内容添加到您的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类型[custom_date next_week]

的“表单”字段中

现在,您可以在邮件正文中使用[next_week]

答案 1 :(得分:1)

这对响应方来说有点晚了,但是当我想在我的表单和邮件正文中添加自定义短代码时,我一直看到这篇文章。我希望能够插入短代码,而无需在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;
}

答案 2 :(得分:0)

CF7中有两种类型的标签:表单标签(联系表单本身)和mail tags(电子邮件)— read more


  1. 自定义表单标签

    要添加自定义表单标签,可以在wpcf7_add_form_tag()动作挂钩(Read more)上使用wpcf7_init功能。

    已接受答案中的wpcf7_add_shortcode()函数被认为已弃用,并由该函数代替。

  2. 自定义邮件标签

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

    1. 启用自定义简码(不要忘记事先创建简码处理程序):

      • 根据DACrosby's answer,对于邮件组件。
      • 对于整个邮件(所有组件),请使用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()注册。

答案 3 :(得分:0)

我的解决方案很简单。做任何你想要的短代码并将其放在联系表格区域。只是不要忘记执行以下操作: 仅将以下代码放入 functions.php 中,您的短代码将起作用:

add_filter('wpcf7_form_elements', 'do_shortcode');

答案 4 :(得分:-1)

我之前没有做过,但我认为短代码是由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/