1

我在 wordpress 中使用联系表 7,并且必须为表单操作 url 创建一个自定义挂钩。如果我想检查是否存在特定表单“id”,如果存在,则将其发送到另一个 url。该代码如下所示:

add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');

function wpcf7_custom_form_action_url($url)
{
    global $wpcf7_contact_form;

    if ($wpcf7_contact_form->id === 333)
    {
        return 'http://mydomain.com/Leads/';
    }
    else
    {
        return $url;
    }
}

但是,我有 4 个表单,我希望它检查它们是否存在以将它们发送到与上面相同的 url(它是我的域 url)。如果我尝试添加多个 ID,它会中断。这是我尝试过的:

add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');

function wpcf7_custom_form_action_url($url)
{
    global $wpcf7_contact_form;

    if ($wpcf7_contact_form->id === 333 || 334 || 335 || 336)
    {
        return 'http://mydomain.com//Leads/';
    }
    else
    {
        return $url;
    }
}

上面的代码似乎不起作用。

我还尝试将其作为这样的数组进行检查:

add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');

function wpcf7_custom_form_action_url($url)
{
    global $wpcf7_contact_form;

    if( !in_array($wpcf7_contact_form->id,array(660, 684, 685, 686)))
    {
        return 'http://mydomain.com/Leads/';
    }
    else
    {
        return $url;
    }
}

同样,这似乎是不正确的。任何人都可以看到上面不正确的任何内容。我似乎无法让它工作。

4

3 回答 3

2

改变:

if ($wpcf7_contact_form->id === 333 || 334 || 335 || 336)

在:

if (in_array($wpcf7_contact_form->id, array(333, 334, 335, 336)))

因为你的if陈述总是True

于 2013-07-31T14:46:06.657 回答
1

您的第二次尝试(使用||)完全无效。查看 PHP 的运算符优先规则: http: //php.net/manual/en/language.operators.precedence.php

代码被解析/执行为:

if (($wpcf7_contact_form->id === 333) || 334 || 335 || 336)
    ^--                             ^--

(注意额外的括号)。执行相等性测试并返回一个真/假值,然后您OR对一系列整数进行逻辑运算:

0 || 334 || 335 || 336  -> 0 || 351 -> 351 -> true
1 || 334 || 335 || 336  -> 1 || 351 -> 351 -> true

您的 in_array() 版本是正确的,除了您!没有注意 in_array 测试,因此如果检索到的 id 不是这些值之一,您将重定向。如果我正确地阅读了您的问题,那与您想要的相反。使用in_array(), 而不是!in_array().

于 2013-07-31T14:48:38.917 回答
1

您想检查带有例如 ID 的表格,(660, 684, 685, 686)对吗?

如果是这种情况,您已经倒置了in_array语句 ( ! in_array)

改变:

if( !in_array($wpcf7_contact_form->id,array(660, 684, 685, 686)))

进入

if(in_array($wpcf7_contact_form->id,array(660, 684, 685, 686)))

至少,in_array是检查多个值的最佳方式。所以这应该保留在你的最终代码中!

于 2013-07-31T14:57:52.720 回答