2

カスタム ウィジェットを含む Wordpress テーマを開発しています。すべて正常に動作しますが、正しく実装する方法がわからないことが 1 つあります。

管理パネルでウィジェット インスタンスが作成された後、つまり保存後ではなく、ウィジェットがサイドバーにドロップされた直後に Javascript を実行したいと考えています。

ページが読み込まれた後、またはウィジェットが保存された後に JS を実行しても問題はありません。ユーザーが新しいインスタンスをサイド バーにドロップした後に Javascript を実行したいのですが、実際には、ページをリロードせずに複数回発生する可能性があります。

こんにちはフィリップ

4

2 に答える 2

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...

まだ私のお気に入りのテクニックではありません...しかし、ウィジェットでコーディングするよりはクリーンです。作成されたウィジェットを追跡するために変数が必要であり、「this」変数を使用すると便利です

于 2013-08-15T23:20:15.387 に答える
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);
  }
}

依存関係管理があり、DOM の途中で大量の JavaScript を使用しないため、これがより良いルートであると私は主張します。wp_enqueue_scriptを使用することは、通常、常により WordPress らしい方法です。

于 2014-01-16T12:08:22.770 に答える