问题描述

如果一个插件使用了一些脚本 (突出的例子是 jQuery UI Datepicker),但是脚本渲染输出并不满意,那么有两种可能性:

1. 取消注册脚本> 添加自己的版本

所以首先你需要检查手柄,然后找到优先级和钩子 (wp_enqueue_scriptslogin_enqueue_scripts 等)… 你知道这个钻头。

2. 更改 jQuery 插件参数

通常 – 如果插件不是垃圾,它会将参数从 PHP 推送到 JS

wp_localize_script( $handle, $object_name, array( 
    // data
) );

现在,这是将数据添加到 JS 脚本的一种智能方式,但是默认情况下它不可过滤。 WP_ScriptsWP_Dependencies 都不提供任何过滤器用户可以稍后利用

Question: How can we filter the arguments/parameters that are moved from PHP to Javascript using wp_localize_script?

最佳解决思路

wp_localize_script()在全局变量 $wp_scripts 上调用 localize()方法。我们可以将此变量设置为 WP_Scripts 的子类的实例:

class Filterable_Scripts extends WP_Scripts
{
    function localize( $handle, $object_name, $l10n )
    {
        $l10n = apply_filters( 'script_l10n', $l10n, $handle, $object_name );
        return parent::localize($handle, $object_name, $l10n);
    }
}

add_action( 'wp_loaded', function() {
    $GLOBALS['wp_scripts'] = new Filterable_Scripts;
});

主题自定义程序不使用它,它创建一个单独的 WP_Scripts 实例 (请参阅 wp-admin/customize.php) 。也可以替换它:

add_action( 'customize_controls_init', function() {
    $GLOBALS['wp_scripts'] = new Filterable_Scripts;
    $GLOBALS['wp_scripts']->registered = $GLOBALS['registered'];
});

没有一个测试,只是一个想法。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。