Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress联系人表单7自定义短代码_Wordpress_Shortcode_Contact Form 7 - Fatal编程技术网

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

Wordpress联系人表单7自定义短代码,wordpress,shortcode,contact-form-7,Wordpress,Shortcode,Contact Form 7,联系人表单7有一些短代码,比如[\u date]来获取今天的日期。但我想显示一周后的日期 因此,我需要为联系人表单7创建一个自定义的短代码,例如[下周],并在收到的电子邮件中显示正确的日期 我在哪里以及如何创建自定义短代码来联系form 7?我以前没有这样做过,但我认为短代码是由wordpress自己管理的(即使对于像CF7这样的插件也是如此) 创建简单短代码的示例如下: //[foobar] function foobar_func( $atts ){ return "foo and bar

联系人表单7有一些短代码,比如[\u date]来获取今天的日期。但我想显示一周后的日期

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


我在哪里以及如何创建自定义短代码来联系form 7?

我以前没有这样做过,但我认为短代码是由wordpress自己管理的(即使对于像CF7这样的插件也是如此)

创建简单短代码的示例如下:

//[foobar]
function foobar_func( $atts ){
 return "foo and bar";
}
add_shortcode( 'foobar', 'foobar_func' );
放在functions.php中

有关更多信息:


或者您可以使用这样的插件来完成这项工作:

将以下内容添加到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;
}
wpcf7\u add\u shortcode('custom\u date','wpcf7\u custom\u date\u shortcode\u handler',true);
函数wpcf7\自定义\日期\短代码\处理程序($tag){
如果(!is_数组($tag))返回“”;
$name=$tag['name'];
if(空($name))返回“”;
$next_week=日期('Y-m-d',time()+(60*60*24*7));
$html='';
返回$html;
}
现在在CF7 GUI的“表单”字段中键入
[自定义日期下周]


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

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

CF7中有两种类型的标签:表单标签(联系人表单本身)和(电子邮件)-


  • 自定义表单标记

    要添加自定义表单标记,可以在
    wpcf7\u init
    action hook()上使用
    wpcf7\u add\u form\u tag()
    函数

    已接受答案中的
    wpcf7\u add\u shortcode()
    函数被视为已弃用,并被此函数替换

  • 自定义邮件标签

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

  • 启用自定义短代码(不要忘记事先创建短代码处理程序):

    • 对于邮件组件,根据
    • 对于整个邮件(所有组件),使用
      wpcf7\u特殊\u邮件\u标签
      过滤器:
  • 将带有预填充数据的自定义隐藏表单标记添加到表单中,然后在邮件中使用它:
    [带有一些预填充数据的自定义表单标记]
    ;如上所述,自定义表单标记应注册到
    wpcf7\u add\u form\u tag()

  • 我的解决办法很简单。做任何你想做的短码,并把它放在接触表单区域。请不要忘记执行以下操作: 在functions.php中只放置以下代码,您的短代码就可以工作了:


    添加过滤器('wpcf7_form_elements','do_shortcode')

    打印[foobar],帖子和页面打印“foo和bar”。所以它不起作用。当你想在表单中使用短代码,但在发送的电子邮件中它不起作用时,这很好用。请参阅我的答案以获得正确的解决方案此答案显示了如何创建自定义短代码。不幸的是,这不是要问的问题。问题是如何在电子邮件中解析自定义短代码。我使用了一个更简单的版本来满足我的需要:
    wpcf7_add_短代码('input_name',function($tag){return'})
    wpcf7\u add\u shortcode()
    已被弃用,请改用
    wpcf7\u add\u form\u tag()
    (尽管如果已启用调试,您将收到警告)。
    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 );