WP_LOCALIZE_SCRIPT转义我的URL修复或替代

时间:2012-02-11 作者:Danny

这是我的wp\\u enqueue\\u脚本和wp\\u localize\\u脚本,我正在使用它来运行Ajax调用。

wp_enqueue_script( \'function\', plugin_dir_url( __FILE__ ) . \'function.js\', array( \'jquery\', \'json2\' ) );
wp_localize_script( \'function\', \'MyAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
调试时出现此问题:

<script type=\'text/javascript\'>
/* <![CDATA[ */
    var MyAjax = {"ajaxurl":"http:\\/\\/mydomain.com\\/wp-admin\\/admin-ajax.php"};
    /* ]]> */
    </script>
正如你所看到的,我的url被转义了,我不知道为什么。。。对于我正在尝试的操作,是否有可能的修复或替代方法?

提前感谢

2 个回复
最合适的回答,由SO网友:bueltge 整理而成

wp_localize_script() 现在使用json_encode() 这意味着多维数组现在将用于传递的数据。而且,HTML实体解码仅适用于数组的第一级。

更好的方法是使用json和WP提供的默认js可能性。

首先,我通过脚本和从数据库添加选项json_encode 至wp标题:

    add_action( \'admin_enqueue_scripts\', \'fb_print_scripts\' );

    function fb_print_scripts() {
        global $current_screen;

        if ( isset( $current_screen -> id ) && ! in_array( $current_screen -> id, array( \'post\', \'page\' ) ) )
            return;

        if ( is_plugin_active_for_network( plugin_basename( __FILE__ ) ) )
            $options = get_site_option( \'my_options_id\' );
        else
            $options = get_option( \'my_options_id\' );

        if ( ! $options )
            return;
        ?>
        <script type="text/javascript">
            var my_json_object = <?php echo htmlspecialchars( json_encode( $options ) ); ?>;
        </script>
        <?php
    }
之后,我通过javascript读取这些数据;脚本包括viawp_enqueue_script; 下面的示例仅在admin中初始化,您可以更改挂钩,而无需admin_ 也包括在前端。

add_action( \'admin_enqueue_scripts\', \'fb_admin_enqueue_scripts\' );

function fb_admin_enqueue_scripts( $where ) {

    if ( ! in_array( $where, array( \'post.php\', \'post-new.php\', ) )
        return;

    $suffix = defined(\'SCRIPT_DEBUG\') && SCRIPT_DEBUG ? \'.dev\' : \'\';

    wp_enqueue_script(
        self :: get_textdomain() . \'_script\',
        plugins_url( \'/js/my_script\' . $suffix. \'.js\', __FILE__ ),
        array( \'jquery\', \'my_other_script\' ),
        \'\',
        TRUE
    );

}
现在可以在脚本中使用json中的数据,例如

jQuery( document ).ready( function( $ ) {

    if ( typeof my_json_object == \'undefined\' )
        return;

// debug in console of Browser
console.dir( my_json_object ); 

});

SO网友:Dennis Smolek

问题来自于启动wp\\u localize\\u脚本调用时。最有可能的情况是,你只是把代码写进了你的插件,而这个插件加载得太早了。

我也曾与这个问题斗争过一段时间。如果您将代码包装在函数中,并在wp\\u head上使用add\\u操作,它将按预期工作。

function ajaxurl() {
wp_enqueue_script( \'my-ajax-request\', plugin_dir_url( __FILE__ ) . \'js/ajax.js\', array( \'jquery\' ) );
wp_localize_script( \'my-ajax-request\', \'MyAjax\', array(
// URL to wp-admin/admin-ajax.php to process the request
\'ajaxurl\'          => admin_url( \'admin-ajax.php\' ),

// generate a nonce with a unique ID "myajax-post-comment-nonce"
// so that you can check it later when an AJAX request is sent
\'postCommentNonce\' => wp_create_nonce( \'myajax-post-comment-nonce\' ),
)
);


}
add_action(\'wp_head\', \'ajaxurl\');

结束

相关推荐

如何在管理员WP_LIST_TABLE中实现管理员AJAX?

我是WordPress的新手,如果有人能帮助我,我将非常感激。在文档中有参数ajax“true”。没有说过如何使用WP\\u List\\u Table类实现Ajax吗?parent::__construct( array( \'singular\' => \'user\', //singular name of the listed records \'plural\' => \'users\', //pl