web-dev-qa-db-ja.com

管理領域でWordpressウィジェットのタイトルバーを編集しますか?

私が作成しているすべてのカスタムウィジェットの中でモバイルウィジェットとデスクトップウィジェットのための手段を提供しているので、私はそれができるようにバックエンドのウィジェット領域のタイトルでウィジェットがモバイル/デスクトップであるかどうかを示すのは良い考えだと思いますこのセクションをよりユーザーフレンドリーにするのに役立ちます。

どのアクティブウィジェットがデスクトップでどのアクティブウィジェットがデスクトップであるかを識別できるように、モバイル/デスクトップアイコンを含めるために、ウィジェットのタイトルバー内(ウィジェットタイトルの左側)に画像をロードするために使用できるフィルタはありますか?モバイル、それのオプションで見るためにウィジェットを開く必要なしに?

これをバックエンドのadmin widgets.phpページでのみキャプチャするためのワードプレスのどこかにフックがありますか?ページをロードするときにphpフックを使用したいです。モバイルからデスクトップへ、またはその逆にオプションが変わる場合には、すでにjQueryを使用しています。これを行う必要があるのは、ウィジェットページの初期ロードです。

可能?

以下の例は、可能であれば、WP_Widgetsクラスファイル内および拡張されたWP_Widgetsクラスファイルから簡単に最初のwidgets.phpページをロードできるようにするためのものですか。またはフィルタ、アクションなど.

enter image description here

だから、私はWP_Widgetを拡張するWidgetクラスの中で次のようにしてやってみました:

function __construct() {

        parent::__construct(
            'social_media_widget',
            __('Social Media Widget', 'mydomain')
        );

        add_filter('dynamic_sidebar_params', array($this, 'my_sidebar_params'), 10, 1);

    }

    function my_sidebar_params($params) {

        $sidebar_id = $params[0]['id'];

        if (is_admin() && $params[0]['widget_name'] == 'Social Media Widget')
        {
            $_widget = get_option('widget_social_media_widget');

            if (!empty($_widget) && isset($_widget[$params[1]['number']]))
            {
                // $platform is being set in here as "desktop" because if I do a var_dump, it gives me "desktop", however, the image is not showing in the titlebar using before_title below... why?
                $platform = isset($_widget[$params[1]['number']]['platform']) ? $_widget[$params[1]['number']]['platform'] : '';
            }

            if (!empty($platform))
            {
                $params[0]['before_title'] = '<img src="' . get_stylesheet_directory_uri() . '/img/' . $platform . '-icon.png" alt="' . $platform . ' menu" class="menu-icon ' . $platform . '-icon" />';
            }
        }
    return $params;
}

そのため、$ platformが正しい値になりましたが、admin Widgets領域のタイトルバーのタイトルの前に画像が添付されていません。

3
Solomon Closson

私はあなたが$params = apply_filters( 'dynamic_sidebar_params', $params );を探していると思います(ここを見てください: https://github.com/WordPress/Word/master/wp-includes/widgets.php#L706 ).

今このフィルタはフロントエンドとバックエンドの両方で評価されます。だからあなたの質問に答えるために、あなたはif( is_admin() ){ // Do icons }チェックであなたのフィルタをラップすることができます。

さらに良いことに、あなたはあなたのregister_sidebar( $args )関数で登録レベルでこれを定義することができます。関数の定義については 236行目 を、カスタマイズする必要がある実際の引数については Line 250 を調べてください。コンディション。このようなもの

$before_title = is_admin() ? '<span class="custom-icon"></span><h2 class="widgettitle">' : '<h2 class="widgettitle">';

$args = array(
  // ... your custom args definition
  'before_title' => $before_title,
);

register_sidebar( $args );

UPDATE

コードをさらに深く掘り下げた後、私の答えはいくつかの理由であなたのニーズに合いません。

  • ウィジェットのタイトルはHTMLエスケープされているため、タグをレンダリングできません
  • widget_title はHTMLエスケープ動作を無効にするためのフィルタが存在しますが、 admin領域 には適用されません。 229行目 に印刷されるとすでに回避されているため、この動作をユースケースに合わせて変更することはできません。
  • だからここで可能な唯一の解決策はあなたの希望のグリフを適用するためにjQuery/CSSに戻ることです
4
bynicolas