問題描述

如果一個外掛使用了一些指令碼 (突出的例子是 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。