问题描述
如果一个插件使用了一些脚本 (突出的例子是 jQuery UI Datepicker),但是脚本渲染输出并不满意,那么有两种可能性:
1. 取消注册脚本> 添加自己的版本
所以首先你需要检查手柄,然后找到优先级和钩子 (wp_enqueue_scripts
,login_enqueue_scripts
等)… 你知道这个钻头。
2. 更改 jQuery 插件参数
通常 – 如果插件不是垃圾,它会将参数从 PHP 推送到 JS
wp_localize_script( $handle, $object_name, array(
// data
) );
现在,这是将数据添加到 JS 脚本的一种智能方式,但是默认情况下它不可过滤。 WP_Scripts
和 WP_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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。