用get请求联系表单7设置字段值

时间:2014-06-05 12:42:36

标签: php html wordpress forms contact-form-7

我想用get request设置字段值

  

example.com/subscribe/?email=asfafs

但是当我加载包含表单的页面时,表单不会显示。我明白为什么它无法展示。因为表单本身也可以提交get请求。我还安装了this插件,它可以让我设置一个字段值,但它没有。

这就是我所拥有的:

<p>Uw naam (verplicht)<br />
    [text* input-name] </p>

<p>Uw email (verplicht)<br />
    [dynamictext dynamicname "CF7_GET key='email'"] </p>
<p>Onderwerp<br />
    [text your-subject] </p>

<p>Uw bericht<br />
    [textarea your-message] </p>

<p>[submit "Verzenden"]</p>

在我的页面中:

<?php echo do_shortcode('[contact-form-7 id="1062" title="Contactformulier 1"]'); ?>

我不介意为此使用不同的插件。如果有一个符合我需要的请告诉我。

7 个答案:

答案 0 :(得分:9)

[text* your-name default:get] 该字段将从具有相同名称(“您的名字”)的GET变量中获取其默认值。通过使用其他查询字符串访问表单页面的URL来尝试此操作:

http://example.com/contact/?your-name=John+Smith

但是,如果您在单个表单标记中有两个或更多默认选项,该怎么办?让我们考虑一下这个form-tag的情况:

[text* your-name default:get default:post_meta "Your Name"]

答案 1 :(得分:7)

我刚刚安装了您链接的插件并对其进行了测试。该插件并不意味着为Contact Form 7中的字段提取GET变量。该插件将执行两项操作

  1. 它将获取$ _GET变量并使用它创建一个隐藏字段。
  2. 它将在页面上显示变量(就像文本一样,而不是在字段中)
  3. 您的示例中的短代码供此http://wordpress.org/plugins/contact-form-7-dynamic-text-extension/插件使用。我也下载并测试了该插件,它似乎工作正常。

    这是我创建示例的页面。 http://jtwebb.com/stackoverflow-question/?someemail=asdf如果您想查看它是否正在使用动态文本扩展插件。

    更新:这是我的联系表单7代码:

    <p>Your Name (required)<br />
        [text* your-name] </p>
    
    <p>[showparam someemail] <-- this is the shortcode of show param, just text no field</p>
    
    <p>[getparam someemail] If you inspect this you'll see a hidden get field with the value of 'someemail' in it.</p>
    
    <p>Your Email (required)<br />
        [dynamictext* dynamictext-380 "CF7_GET key='someemail'"]<br>This field was created with <a href="http://wordpress.org/plugins/contact-form-7-dynamic-text-extension/">http://wordpress.org/plugins/contact-form-7-dynamic-text-extension/</a></p>
    
    <p>Subject<br />
        [text your-subject] </p>
    
    <p>Your Message<br />
        [textarea your-message] </p>
    
    <p>[submit "Send"]</p>
    

答案 2 :(得分:4)

我知道这个问题已经得到解答,但对于那些寻找不需要插件的解决方案的人,我选择执行以下操作。

首先,我通过Wordpress仪表板在插件中创建了我的表单。我添加了我想从URL保存参数的字段,并为其分配了一个ID。

[text page-name class:form-control id:source minlength:2 maxlength:80]

接下来,我添加了一个链接,将参数传递给表单,如此

<a href='http://mycoolwebsite.com/contact?id=homepage'>Contact Us</a>

然后使用一些JavascriptJQuery我从网址获取id参数,并将其设置为表单中输入的值。 (getParameterByName(name,url)函数取自此答案:How can I get query string values in JavaScript?

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    url = url.toLowerCase(); 
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}
var param = getParameterByName('id');
jQuery('#source').hide();
jQuery('#source').prop('disabled', true);
jQuery('#source').attr('value', param);
jQuery('#source').val(param);

我还隐藏和禁用输入字段,因此无法看到它,也无法修改(轻松)。我还使用CSS

隐藏输入字段

#source{visibility:hidden}

通过这种方式,我可以从我网站的任何位置链接到该表单,并附上该人来自的来源,并将其放入我收到的电子邮件中。

我没有看到此方法有任何问题,因此无需使用插件。我确信依赖Javascript并不理想,但同样不适合使用您网站上的许多插件,因为它们可能会很快过时,并且经常会导致彼此之间发生冲突。

希望这可以帮助任何寻找替代方案的人。我想以这种方式了解人们的意见,因为我愿意接受如何改进它的建议。

答案 3 :(得分:1)

如果每个表单元素都有特定的逻辑,也可以使用wpcf7_form_tag钩子

// define the wpcf7_form_tag callback
function filter_wpcf7_form_tag( $scanned_tag, $replace ) {

    // set default option for your field
    if($scanned_tag['name'] == 'my-field' && isset($_GET['my-param'])){
        $scanned_tag['options'][] = sprintf('default:%s', $_GET['my-param']);
    }

    // repeat operation for another field

    return $scanned_tag;
};

// add the filter
add_filter( 'wpcf7_form_tag', 'filter_wpcf7_form_tag', 10, 2 );

答案 4 :(得分:0)

您可以首先在表单字段中设置一个唯一的文本,然后使用该钩子将其替换为所需的值。然后就不需要插件了。

示例。在表单代码中:

<p>Phone<br />
[text phone "PHONE_VALUE"] </p>

在functions.php中:

add_filter( 'wpcf7_form_elements', function( $form ) {
  $form = str_replace( 'PHONE_VALUE', $_GET['phone'], $form );
  return $form;
} );

在网址中:

example.com/page?phone=111111

答案 5 :(得分:0)

根据此article

如果要将值发送到选择列表,可以通过在域代码中添加参数default:get来轻松完成此操作:

[select* the-recipient default:get "Employee One|employeeone@yourdomain.com" "Employee Two|employeetwo@yourdomain.com" "Employee Three|employeethree@yourdomain.com"]

,然后在GET请求中发送参数,例如:

http://yourdomain.com/contact/?the-recipient=Employee%20Two

答案 6 :(得分:0)

因此,在我的情况下[default:get]无法正常工作,我按照以下步骤操作

  1. [text * package id:package readonly] for url =“ http://www.example.se/package-quote/?package=Basic”
  2. 在footer.php中编写jquery脚本

http://toihid.com/contact-form-7-set-field-value-with-get-request/