私はこのようなWordPressページに連絡フォームを持っています:
$( '#contact_form' ).bootstrapValidator({
fields: {
// ...
},
submitHandler: function( formInstance ) {
$.post( "../send-message", $("#contact_form").serialize(), function( result ) {
alert( pw_script_vars.State );
});
}
});
フォームがAjaxリクエストを使用して送信されると、PHPコードを含む/send-message
という名前の別のWordPressページに移動して、成功または失敗の値をAjaxリクエストに返して成功または失敗を警告する必要があります。失敗メッセージ固定値を使用してwp_localize_script
ファイルでfunctions.php
関数を使用してみましたが、問題なく動作しました。
function enqueue_scripts() {
wp_enqueue_script( 'pw_script', get_stylesheet_directory_uri().'/inc/js/functions.min.js', array( 'jquery' ) );
wp_localize_script( 'pw_script', 'pw_script_vars', array( 'State' => 'success' ) );
}
add_action( 'wp_enqueue_scripts', 'enqueue_scripts' );
しかし、wp_localize_script
WordPressページで/send-message
を使用しようとしましたが、うまくいきませんでした。これが '/ send-message'ページの内容です。
<?php
$sendSuccess = sendMessage();
if( $sendSuccess )
wp_localize_script( 'pw_script', 'pw_script_vars', array( 'State' => 'success' ) );
else
wp_localize_script( 'pw_script', 'pw_script_vars', array( 'State' => 'failure' ) );
function sendMessage() {
//This function will send the email then it will return true or false.
}
?>
wp_localize_script
で/send-message
を使用すると、JavaScriptファイルで未定義変数pw_script_vars
が発生します。
wp_localize_script
以外のWordPressページでfunctions.php
をどのように使用できますか?
ページテンプレートでwp_localize_script
を使用することはできません。スクリプトを登録した後は、functions.php
またはカスタムプラグインでこれを使用する必要があります。通常、これはwp_enqueue_scripts
アクションに含まれています。
https://codex.wordpress.org/Function_Reference/wp_localize_script
あなたのwp_localize_scriptを他の場所に移動する必要はありません。あなたの問題はWordPressの外でAJAXを使用しようとしているという事実にあります。 WordPressでAJAXを使用する方法の簡単なバージョンを示している私の以前の答えを参考にしましょう ここ