如何更改联系表格7的表格动作网址?

时间:2013-01-06 00:07:21

标签: wordpress contact contact-form-7

我在wordpress网站上使用联系表格7,表格多种多样。 我需要将一个表单指向不同的表单操作URL。

我发现下面的回复是针对上一个帖子的,但我不知道该怎么做。 有人可以指定“附加设置”中需要包含哪些确切代码 和functions.php中的代码是什么样的?

感谢您的帮助!


来自差异的回复。线程,我不完全理解......

*是的,您必须使用此Filter Hook wpcf7_form_action_url更改表单中的“action”属性。 (代码是什么?)您可以将钩子添加到主题的functions.php中,然后只处理ASP页面中的表单数据。(代码?) *


4 个答案:

答案 0 :(得分:31)

由于您根本不熟悉PHP代码,我将在Wordpress API中为您提供一些编码速成课程。

首先,你需要知道函数和变量之间的区别。变量是表示任意值的单个实体。价值可以是任何东西。数字,某人的名字或复杂的数据。

一个函数可以执行一系列操作来发回 - 或返回 - 一个变量,或者改变一个给定的变量。

<?php
$a = 1; //Number
$b = 'b'; //String *note the quotes around it*
$c = my_function(); //Call to a function called my_function
echo $a; //1
echo $b; //b
echo $c; //oh, hello
function my_function()
{
    return 'oh, hello';
}
?>

Wordpress根据Event-Driven Programming样式松散地使用自己的动作和过滤系统。

这意味着Wordpress正在“监听”特定事件的发生,当它发生时,它会执行附加到该事件的函数(也称为回调)。这些是“动作”和“过滤器”。那有什么区别?

行动是做事的功能
过滤器是返回内容的函数

那么这一切如何适合你的问题?

联系表格7有自己的过滤器,用于返回其表单发送信息的URL。

让我们看一下Filter Hook

的基础知识
add_filter('hook_name', 'your_filter');
  1. add_filter是告诉Wordpress需要监听的功能 特定事件。
  2. 'hook_name'是Wordpress正在侦听的事件。
  3. 'your_filter'是在触发'hook_name'事件时调用的函数 - 或回调函数。
  4. 前一个线程的链接指出您需要使用的钩子名称是'wpcf7_form_action_url'。这意味着您只需要调用add_filter,将'hook_name'设置为'wpcf7_form_action_url',然后将'your_filter'设置为您将设置为回调函数的名称。

    完成后,您只需要定义一个名称与您放置的“your_filter”相匹配的函数,并确保它返回一个URL来修改表单操作。

    现在问题出现了:这将改变你的所有形式。但第一件事是第一件事:看看你是否可以自己获得一些有效的代码。只需在 functions.php 中编写代码,并告诉我们结果如何。

    <强>更新

    你能够如此迅速地获得它的事实是非常好的,并且显示了你为此付出的研究工作量。

    将所有这些放在 functions.php

    add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
    function wpcf7_custom_form_action_url()
    {
        return 'wheretopost.asp';
    }
    

    如前所述,这会影响您的所有表单。如果这只会影响给定页面上的表单,您可以执行以下操作:

    add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
    function wpcf7_custom_form_action_url($url)
    {
        global $post;
        $id_to_change = 1;
        if($post->ID === $id_to_change)
            return 'wheretopost.asp';
        else
            return $url;
    }
    

    您需要做的就是将$ id_to_change的值更改为一个数字,该数字代表您尝试影响的帖子/页面的ID。因此,如果 - 例如 - 您有一个想要更改操作URL的关于页面,您可以在管理仪表板中找到关于页面的ID号(只需转到页面编辑器并在URL中查找ID数字)并将1改为任何ID号。

    希望这可以帮助你,祝你好运。

答案 1 :(得分:1)

很好的答案@ maiorano84,但我认为您应该检查表单ID而不是Post。这是我的版本。

add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
function wpcf7_custom_form_action_url($url)
{
    $wpcf7 = WPCF7_ContactForm::get_current();
    $wpcf7_id = $wpcf7->id();

    $form_id = 123;
    

    return $wpcf7_id == $form_id? '/action.php' : $url;
}

您可能需要禁用WPCF7 AJAX。可以通过在您的wp-config.php

中放置以下代码来禁用该功能
define('WPCF7_LOAD_JS', false);

答案 2 :(得分:0)

您可以在成功提交后添加操作,例如documentation says

添加过滤器将起到改变表单上的操作的作用,但不幸的是它也会破坏插件的功能。如果像其他答案一样添加过滤器,则表示表单将在提交后保持微调器状态。

您可以使用高级设置(例如:

)使表单在提交时执行其他操作
on_submit: "alert('submit');"

有关高级设置here的详细信息。

答案 3 :(得分:0)

根据@ abbas-arif,他的解决方案效果很好,但有局限性。此解决方案可更改该ID对包含在帖子中的所有表单的表单操作。 更好的解决方案应该是直接使用表单的ID。要获取它,请使用wordpress> 5.2,您可以使用:

add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');
function wpcf7_custom_form_action_url($url)
{
    $cf7forms = WPCF7_ContactForm::get_current();
    $Form = $cf7forms -> id;
    
    
        switch($Form){
            case 1:
                return 'destination like salesforce url 1...';
            case 2:
                return 'destination like salesforce url 2...';
            case 3:
                return 'destination like salesforce url 3...';
            default:
                return $url;
            
        }

}