web-dev-qa-db-ja.com

Functions.php以外のWordPressページでwp_localize_scriptを使用する方法

私はこのような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をどのように使用できますか?

3
Brad

ページテンプレートでwp_localize_scriptを使用することはできません。スクリプトを登録した後は、functions.phpまたはカスタムプラグインでこれを使用する必要があります。通常、これはwp_enqueue_scriptsアクションに含まれています。

https://codex.wordpress.org/Function_Reference/wp_localize_script

2
user1049961

あなたのwp_localize_scriptを他の場所に移動する必要はありません。あなたの問題はWordPressの外でAJAXを使用しようとしているという事実にあります。 WordPressでAJAXを使用する方法の簡単なバージョンを示している私の以前の答えを参考にしましょう ここ