簡體   English   中英

在WordPress 3.5.x上的自定義主題小部件中調用wp_enqueue_media()會導致js錯誤

[英]Calling wp_enqueue_media() in a custom theme widget on WordPress 3.5.x cause js error

我正在為自己的WordPress主題編寫自定義小部件。

從WordPress 3.5開始,有一個新的Media Uploader而不是舊的ThickBox。

我的小部件曾經在3.5以上的WordPress版本上正常工作,但現在新的媒體上傳程序阻止了舊的工作行為。

我在costructor中添加了一個檢查wp_enqueue_media函數的存在:

if( function_exists( 'wp_enqueue_media' ) ) {
    wp_enqueue_media();
}

但是當這部分cose被執行時,javascript會在控制台中拋出一個錯誤來停止Js引擎:

Uncaught TypeError: Cannot read property 'id' of undefined    load-scripts.php:69

我刪除了所有的小部件代碼,並將其簡化為簡單...錯誤是由wp_enqueue_media()調用引起的,但我無法理解為什么以及如何解決它。

我還為您的主題選項閱讀了Wordpress 3.5自定義媒體上傳 ,但沒有提到這個問題

誰能指出我正確的方向? 有沒有可用於WordPress 3.5媒體上傳器的文檔?

對你來說現在為時已晚,但可能對其他人有所幫助。 我設法使用它

add_action( 'admin_enqueue_scripts', 'wp_enqueue_media' );

希望能幫助到你!

您遇到的問題是因為您可能將自定義jquery放在標題中,而您沒有注冊wordpress jquery。 如果定義了多個jquery,您將收到該錯誤。

我的消息是你應該刪除你的jquery腳本或從wordpress刪除一個

function remove_jquery() {

wp_deregister_script('jquery');
//wp_register_script('jquery', ("//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"), false);

}

if(!is_admin()){add_action('init', 'remove_jquery');}

我建議你使用jquery wordpress為你提供,如果沒有,正確的排隊方法是取消注冊默認的一個寄存器你的jquery。 只需從remove_jquery函數中刪除注釋即可。

此外,上面的代碼應該在functions.php中

干杯。

從codex [1]開始,應該從'admin_equeue_scripts'動作鈎子調用函數wp_enqueue_media( $args ) 或以后。

例:

function enqueue_media() {
    if( function_exists( 'wp_enqueue_media' ) ) {
        wp_enqueue_media();
    }
}

add_action('admin_enqueue_scripts', 'enqueue_media');

希望它有所幫助。

[1]。 https://codex.wordpress.org/Function_Reference/wp_enqueue_media

要進行調試,您需要獲取發送到瀏覽器的非縮小版本的js。 查看文檔

SCRIPT_DEBUG

SCRIPT_DEBUG是一個相關的常量,它將強制WordPress使用核心CSS和Javascript文件的“dev”版本,而不是通常加載的縮小版本。 當您測試對任何內置.js或.css文件的修改時,這非常有用。 默認值為false。

define('SCRIPT_DEBUG', true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM