如何更改联系表单 7 的表单操作 url?

Posted

技术标签:

【中文标题】如何更改联系表单 7 的表单操作 url?【英文标题】:how to change form action url for contact form 7? 【发布时间】:2012-12-20 02:43:32 【问题描述】:

我在一个包含多个表单的 wordpress 网站中使用 Contact Form 7。 我需要将一个表单指向与其他表单不同的表单操作 url。

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

感谢您的帮助!


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

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


【问题讨论】:

链接到上一个帖子?你试过什么? SO 不会为您编写代码,尽管它可以帮助您编写已经编写的代码 抱歉,我是一名设计师,在我之前建立的 WP 网站上工作。看到已经安装了联系表格 7 并设置了各种表格,我添加了一个新表格并让电子邮件通知正常工作。但我需要将新表单的数据发送到与默认不同的 .asp 文件。网上搜索了一下,好像可以在CF7的附加设置中添加代码,add_filter(wpcf7_form_action_url, ________)和function.php文件?我找到了无数关于如何重定向 url 的 php 代码,但在 php 上没有任何东西可以更改表单操作的 url……抱歉我在黑暗中回复:this.. 这里是上一页的链接。线程:***.com/questions/7101614/contact-form-7-post-to-asp 这仍然无法解释您到目前为止所尝试的内容。上一个线程中的答案实际上告诉您编写更改所需的代码所需的一切。正如 FelipeAls 所说,我们在这里帮助您学习并帮助您编写自己开发的代码。不为你做你的工作。 抱歉,我对 php 完全不熟悉,我已经阅读了几篇教程类型的文章,对这些术语有点不知所措,对我来说完全陌生。任何有关逐步编码或从哪里开始的帮助或指导将不胜感激。谢谢。 【参考方案1】:

由于您根本不熟悉 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 正在“侦听”某个事件的发生,当它发生时,它会执行附加到该事件的函数(也称为回调)。这些是“操作”和“过滤器”。那么有什么区别呢?

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

那么这一切如何解决您的问题?

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

让我们看看Filter Hook的基础知识

add_filter('hook_name', 'your_filter');
    add_filter 是告诉 Wordpress 它需要监听的函数 用于特定事件。 'hook_name' 是 Wordpress 正在侦听的事件。 “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 号。

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

【讨论】:

我故意没有马上给你完整的答案。您需要通读此内容,提出正确的 add_filter 调用以及您自己的回调函数。一旦你这样做了,我们可以指导你完成更多。所有的作品都为你准备好了。 maiorano84,非常感谢您的回复。是的,我确实到了 add_filter('wpcf7_form_action_url', 'formname');但你的解释澄清了逻辑。如何“确保它返回一个 URL 来修改表单操作”是我完全迷失的地方。如果这是在 CF7/WP 之外,我只会在 html 中编码
但不确定它的 php 版本是什么?再次,我为我缺乏理解而道歉。谢谢。
好的,我会再看一些 tmrw,因为我觉得我拿着碎片并且完全失明了。非常感谢。 好的,想出了在CF7中添加“附加设置”:add_filter('wpcf7_form_action_url', 'formname');并在functions.php中添加代码:function formname() return "whereToPost.asp"; 我用 add_filter('wpcf7_form_action_url', 'wpcf7_custom_form_action_url');在functions.php文件和表单中,一旦点击提交按钮,显示处理圈,没有响应。因此,我将该代码放在 CF7 中的“附加设置”下。这使我可以接收包含数据的电子邮件,但似乎没有与外部 .asp 对话。在浏览器中查看.asp url本身显示错误:“对不起,出现系统错误,FromAddress属性不能为空。”不确定代码是否需要修改,或者 .asp 本身是否有问题,这将是 IT 问题。【参考方案2】:

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

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

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

on_submit: "alert('submit');"

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

【讨论】:

注意:on_sent_ok 和 on_submit 已正式从 Contact Form 7 5.0 中删除。您可以使用 DOM 事件来代替这些设置。【参考方案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' );

【讨论】:

使用 apply_filters AJAX 禁用 WPCF7 对我不起作用。 如果过滤器不起作用,您可以在 wp-config.php 中定义 define('WPCF7_LOAD_JS', false); 是的,我终于在 wp-config.php 中完成了它,但是我做了更多的调整,因为我不想为每个表单禁用 WPCF7_LOAD_JS,只是为了一个。它工作正常。【参考方案4】:

根据@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;
            
        


【讨论】:

以上是关于如何更改联系表单 7 的表单操作 url?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 JavaScript 将动态 URL 添加到 WordPress 中的表单操作?

在 PHP 中获取联系表 7 表单 ID

javascript 在提交联系表单7时重定向到URL,将以下代码放入您要重定向的表单上的“其他设置”选项卡中

javascript 在提交联系表单7时重定向到URL,将以下代码放入您要重定向的表单上的“其他设置”选项卡中

php 过滤以在提交或重定向时从URL中删除联系表单7查询字符串。进入函数文件。

如何使用 jquery 更改表单的操作