【问题标题】:Wordpress Contact form 7 custom shortcodesWordpress 联系表 7 自定义简码
【发布时间】:2012-10-22 04:11:58
【问题描述】:

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

因此,我需要为 Contact form 7 创建一个自定义简码,其中包含 [next_week] 并在收到的电子邮件中显示正确的日期。

在哪里以及如何为 Contact form 7 创建自定义简码?

【问题讨论】:

    标签: wordpress shortcode contact-form-7


    【解决方案1】:

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

    add_filter('wpcf7_form_elements', 'do_shortcode');

    【讨论】:

      【解决方案2】:

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


      1. 自定义表单标签

        要添加自定义表单标签,您可以在 wpcf7_init 操作挂钩 (Read more) 上使用 wpcf7_add_form_tag() 函数。

        已接受答案中的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】:

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

        【讨论】:

          【解决方案4】:

          将以下内容添加到您的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]

          【讨论】:

          • 我使用更简单的版本来满足我的需要:wpcf7_add_shortcode('input_name', function( $tag ) { return '&lt;input name="'.$tag['basetype'].'" value="your_value" /&gt;' });
          • wpcf7_add_shortcode() 已弃用,请改用wpcf7_add_form_tag()(尽管如果您已启用调试,则会收到警告)。
          【解决方案5】:

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

          【讨论】:

          • CF7 打印 [foobar],帖子和页面打印“foo and bar”。所以它没有工作。
          • 当您想在表单中使用简码但它在发送的电子邮件中不起作用时,这可以正常工作。请看我的正确解决方案的答案
          • 此答案显示了如何创建自定义简码。不幸的是,这不是被问到的问题。问题是如何在电子邮件中解析自定义简码。
          猜你喜欢
          • 2016-08-06
          • 2016-09-25
          • 2012-09-05
          • 1970-01-01
          • 2016-07-17
          • 2013-09-01
          • 1970-01-01
          • 2022-06-10
          • 2016-08-16
          相关资源
          最近更新 更多