我在wordpress网站上使用联系表格7,表格多种多样。 我需要将一个表单指向不同的表单操作URL。
我发现下面的回复是针对上一个帖子的,但我不知道该怎么做。 有人可以指定“附加设置”中需要包含哪些确切代码 和functions.php中的代码是什么样的?
感谢您的帮助!
来自差异的回复。线程,我不完全理解......
*是的,您必须使用此Filter Hook wpcf7_form_action_url更改表单中的“action”属性。 (代码是什么?)您可以将钩子添加到主题的functions.php中,然后只处理ASP页面中的表单数据。(代码?) *
答案 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');
前一个线程的链接指出您需要使用的钩子名称是'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;
}
}