2013-04-03 38 views
2

我開發一個WordPress主題,包括自定義的Widget創建,一切順利正常,但有一兩件事我不知道如何正確地執行:WordPress的運行窗口小部件後,JS在管理控制檯

我會喜歡在管理面板中創建Widget Instance之後運行一些Javascript,這意味着在Widget被放入側邊欄後的那一刻,而不是在保存之後。

我沒有在加載頁面或Widget被保存後運行JS的問題,我想在用戶剛將一個新實例拖放到側欄後運行Javascript,但實際上可能會發生多次,而無需重新加載頁面。

問候菲利普

回答

1

將腳本標記放置在窗口小部件窗體函數中。

function form($instance) 
{ 
?><script type="text/javascript">console.log("firing javascript");</script> 
<?php 
//form details... 

} 

我最終採取了與此不同的方式。使用wp_enque_script在頁面上加載我們的插件管理腳本,然後使用jquery選擇器和事件處理程序來定位正確的小部件。

$('div.widgets-sortables') 
       .on('sortstop', function (event, ui) { 
        // only if this widget has the proper identifier...do something 
        if (ui.item.find('.my_widget').length == 0) 
         return; 
        run some function... 

仍然不是我最喜歡的技術......但它更清潔,然後在小部件中編碼。確實需要一個變量來跟蹤創建的小部件,並使用「這個」變量是有用

+0

這似乎是迄今爲止我工作的唯一方法,但似乎必須有更好的方法來做到這一點...... – aendrew

0

這樣做的另一種方式我只是想出了 -

我將展現出更加複雜的例子涉及到的相關性,但實現Custom_Widget::form()位是真正的問題的答案:

function add_js_deps() { 
    if (is_admin()) { 
    wp_enqueue_script('jquery-ui-accordion'); 
    } 
} 
add_action('init', 'add_js_deps'); // "init" because wp_enqueue_scripts is too late. 

// Then in the widget.... 
class Custom_Widget extends WP_Widget { 
    public function form($instance) { 
    /** Collapsing accordion-y form HTML here **/ 
    wp_enqueue_script('custom-js', plugins_url('js/my.js', __FILE__), array('jquery-ui-accordion'), '1.0.0', true); 
    } 
} 

我要說,這是因爲它依賴管理更好的路線,你會不會有一堆的JavaScript中途到您的DOM 。無論如何,使用wp_enqueue_script通常總是更加WordPress的方式。