如何在WordPress页面中使用wp_LOCALIZE_SCRIPT而不是unctions.php?

时间:2016-07-04 作者:Brad

我在WordPress页面中有一个联系人表单,如下所示:

$( \'#contact_form\' ).bootstrapValidator({
    fields: {
        // ...
    },
    submitHandler: function( formInstance ) {
        $.post( "../send-message", $("#contact_form").serialize(), function( result ) { 
            alert( pw_script_vars.State );            
        });
    }
}); 
当使用Ajax请求提交表单时,它会转到另一个WordPress页面,标题为/send-message 它有PHP代码来发送电子邮件,然后它应该向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/send-message WordPress页面无法运行。以下是“/发送消息”页面的内容:

<?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 导致未定义的变量pw_script_vars 在JavaScript文件中。

如何使用wp_localize_script 在WordPress页面中,而不是functions.php?

2 个回复
SO网友:user1049961

您不能使用wp_localize_script 在页面模板中。你必须在functions.php 或者您的自定义插件,在您注册脚本之后,通常在wp_enqueue_scripts 行动

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

SO网友:Jeffrey von Grumbkow

您不需要将wp\\U localize\\u脚本移动到其他任何地方。您的问题在于您试图在WordPress之外使用AJAX。让我参考一下我之前的回答,其中展示了如何在WordPress中使用AJAX的简单版本here