web-dev-qa-db-ja.com

お問い合わせフォーム7のフォームアクションURLを変更する方法は?

複数のフォームがあるwordpressサイトでContactForm7を使用しています。1つのフォームを他のフォームとは異なるフォームアクションURLに転送する必要があります。

以前のスレッドに対する以下の返信を見つけましたが、どうすればよいかわかりません。誰かが「追加設定」に含める必要のある正確なコードと、functions.phpのコードがどのようになるかを指定できますか?

ご協力いただきありがとうございます!


diffからの返信。完全には理解していないスレッド...

*はい、このフィルターフックwpcf7_form_action_urlを使用してフォームの「action」属性を変更する必要があります。 (コードは何ですか?)テーマのfunctions.phpにフックを追加して、ASPページのフォームデータを処理するだけです。(コード?) *


8
user1102824

PHPコードにまったく慣れていないので、Wordpress API内でのコーディングの簡単なコースを少し紹介します。

まず、関数と変数の違いを知る必要があります。変数は、任意の値を表すことを目的とした単一のエンティティです。値は何でもかまいません。番号、誰かの名前、または複雑なデータ。

関数とは、一連のアクションを実行して、変数を送り返すか、returnを返すか、特定の変数を変更するものです。

<?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を変更するAboutページがある場合は、管理ダッシュボードでAboutページのID番号を見つけることができます(ページエディタに移動して、URLでIDを確認するだけです)。番号)を入力し、1をID番号に変更します。

これがあなたを助けてくれることを願っています、そしてあなたに幸運を祈ります。

33
maiorano84

ドキュメントによると のように、送信が成功した後にアクションを追加できます。

フィルタを追加すると、フォームのアクションが変更されるという意味で機能しますが、残念ながら、プラグインの機能も損なわれます。他の回答のようにフィルターを追加する場合は、フォームが送信後もスピナーの状態を維持することを提案します。

次のような詳細設定を使用して、送信時にフォームに別の処理を実行させることができます。

on_submit: "alert('submit');"

詳細設定の詳細 ここ

0
pcatre