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


Contact form 7 set field value with get request

我想用get request设置一个字段值

example.com/subscribe/?电子邮件= asfafs

但是当我加载有表单的页面时,表单没有显示。我明白为什么它不能显示出来。因为表单本身也可以提交get请求。我还安装了这个插件,它应该使我能够设置字段值,但它没有。

这是我所拥有的:

<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"]'); ?>

我不介意为此使用不同的插件。如果有适合我的,请告诉我。

[text* your-name default:get]该字段将从具有相同名称("your-name")的GET变量获得其默认值。通过使用一个额外的查询字符串访问表单页面的URL来尝试:

http://example.com/contact/?your-name=John史密斯+

但是如果在一个表单标签中有两个或多个默认选项呢?让我们考虑一下这个form-tag的情况:

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

我刚刚安装了你链接的插件并测试了它。该插件并不打算为Contact Form 7中的字段拉入GET变量。这个插件将做两件事

    它将获取$_GET变量并创建一个隐藏字段。
  1. 它将在页面上显示变量(就像文本一样,而不是在字段中)

你在你的例子中的短代码是使用这个http://wordpress.org/plugins/contact-form-7-dynamic-text-extension/插件。我下载并测试了这个插件,它似乎工作得很好。

这是我创建示例的页面。http://jtwebb.com/stackoverflow-question/?someemail=asdf如果你想看一下,看看它是与动态文本扩展插件。

UPDATE:这是我的联系人表单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>

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

的例子。格式代码:

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

:

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

example.com/page?phone=111111

我知道这个问题已经回答了,但是对于任何寻找一个不需要插件的解决方案的人,我选择做以下事情。

首先,我通过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,我从URL中获得id参数,并将其设置为表单中输入的值。(getParameterByName(name,url)函数取自这个答案:我如何在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是不理想的,但同样,在你的网站上使用许多插件也是不理想的,因为它们很快就会过时,而且经常会导致彼此之间的冲突。

希望这对寻找替代方案的人有所帮助。我想知道人们对这种方式的看法,因为我愿意听取如何改进它的建议。

根据本文

如果你想发送一个值到一个选择列表,这可以很容易地通过添加参数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

如果你对每个表单元素有任何特定的逻辑,你也可以使用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 );

在我的情况下[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/