13

我在具有多种形式的 wordpress 网站中使用联系表 7。我需要将一个表单指向与其他表单不同的表单操作 url。

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

谢谢你的帮助!


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

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


4

4 回答 4

38

由于您根本不熟悉 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 基于事件驱动编程风格松散地利用自己的动作和过滤系统。

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

动作是做事情
的函数过滤器是返回事情的函数

那么这一切如何适应您的问题呢?

Contact Form 7 有自己的过滤器,它返回表单发送信息的 URL。

那么让我们看一下过滤器挂钩的基础知识

add_filter('hook_name', 'your_filter');
  1. add_filter 是告诉 Wordpress 它需要侦听特定事件的函数。
  2. 'hook_name' 是 Wordpress 正在监听的事件。
  3. 'your_filter' 是触发 'hook_name' 事件时调用的函数或回调。

上一个线程的链接表明您需要使用的挂钩名称是“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 number) 并将 1 更改为 ID 号。

希望这对您有所帮助,并祝您好运。

于 2013-01-06T04:00:01.813 回答
3

很好的答案@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 的另一件事。这可以通过在你的主题functions.php中放置以下代码来禁用

apply_filters( 'wpcf7_load_js', '__return_false' );
于 2020-11-04T20:13:27.457 回答
0

您可以在成功提交后添加操作,如文档所述

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

您可以使用高级设置使表单在提交时执行其他操作,例如:

on_submit: "alert('submit');"

有关高级设置的更多详细信息,请点击此处

于 2016-06-13T14:16:32.823 回答
0

根据@abbas-arif 的说法,他的解决方案效果很好,但有一个局限性。此解决方案更改表单对帖子中具有该 ID 的所有表单的操作。更好的解决方案应该是直接使用表单的 ID。要得到它,whit 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;
            
        }

}
于 2020-11-12T11:31:10.717 回答