サポート » 使い方全般 » サイドバーにウィジェットをプログラムで自動的に登録したい

  • 解決済 s-y-u

    (@s-y-u)


    初めて質問します。

    サイドバーにウィジェットをプログラムで自動的に登録したいと考えています。
    マウスでドラッグ&ドロップで登録することはできます。
    既に登録されているウィジェットを非表示にする方法についてはフィルタなどを見つけたのですが、登録する方法についてがわかりませんでした。

    wp_set_sidebars_widgets() というそれらしき関数は見つけたのですが、開発向けに使用が想定されていないなどと英語で書かれているようです。
    なにか方法はあるのでしょうか?

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    データとして登録するとなると、挙げられている wp_set_sidebars_widgets を使うか、あるいは wp_set_sidebars_widgets 関数内部で行っている update_option で、データベースの値を書き換えるかになります。

    別案として、これが要望に合うかどうかはわかりませんが、登録されているウィジェットを取り出す時に、sidebars_widgets フィルターフックがありますので、このフィルターフックを使って、強制的に特定のウィジェットを追加させることが可能です。
    ※ ただし、この方法では、ユーザーが任意にフックで追加されたウィジェットを外すことができなくなります。

    トピック投稿者 s-y-u

    (@s-y-u)

    情報ありがとうございました。
    教えてもらったキーワードで調べてみました。
    このような理解でよろしいでしょうか?

    1.サイドバーにウィジェットを自動的に登録するようなスタンダードな手段は用意されていない

    2.ウィジェットの登録情報はwp_optionsテーブルに格納されている

    3.ウィジェットはoption_nameがwidget_xxxで始まるレコードに格納されている

    4.サイドバーはoption_nameがsidebars_widgetsのレコードに格納されている

    5.登録情報には配列がシリアライズされた形で保存されている

    なので、wp_optionsの該当する箇所を書き換えればよい!?

    まず $wp_registered_widget_controls の値をvar_dump()して登録されているウィジェットのIDを調べる

    global $wp_registered_widget_controls;
    var_dump( $wp_registered_widget_controls );

    IDはウィジェット名にハイフンと番号が付くようですね。

    xxx-1

    2つ目は

    xxx-2

    みたいな。

    次にget_option()でsidebars_widgetsでサイドバーに登録されている配列を取得して

    $sidebar = get_option( ‘sidebars_widgets’ );

    登録したいサイドバーにウィジェットのIDを追加して

    $sidebar[ ‘サイドバー名’ ][0] = ウィジェット名xxx-1;

    update_option()で更新を掛ける。

    update_option( ‘sidebars_widgets’ , $sidebar );

    これで、ウィジェットが目的のサイドバーに登録されていました。

    ウィジェットを削除する場合は配列を削除すればウィジェットも削除される。

    unset( $sidebar[ ‘サイドバー名’ ][0] );
    update_option( ‘sidebars_widgets’ , $sidebar );

    登録するウィジェットの値を登録しておくにはget_option()でウィジェット名で配列を取得して

    $widget_hoge = get_option( ‘widget_hoge’ );

    配列を書き換えて

    $widget_hoge[ ID番号 ] = array( ‘key1’ => ‘値1’ , ‘key2’ => ‘値2’ …… );

    update_option()で更新を掛ける。

    update_option( ‘widget_hoge’ , $widget_hoge );

    削除はunsetで消して更新すればウィジェットの設定が消える。

    unset( $widget_hoge[ ID番号 ] );
    update_option( ‘widget_hoge’ , $widget_hoge );

    ID番号のところがウィジェットの数によって変わるようで、$wp_registered_widget_controls で調べておかないとダメみたいですね。

    こんにちは、

    参考になるかどうかわかりませんが、

    $wp_widget_factory というグローバル変数も、何かの役に立つかもしれません。

    以前、スキップリンクを作るために以下の記事を書いたのですが、

    http://tenman.info/labo/snip/?p=5171

    何かの役に立てば、

    トピック投稿者 s-y-u

    (@s-y-u)

    グローバル変数の情報ありがとうございました。
    この辺、ソースを見てもコメントがないのでなにがなにやらさっぱりです。
    $wp_widget_factory を調べてみます。
    しかし、ワードプレスおもしろい!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「サイドバーにウィジェットをプログラムで自動的に登録したい」には新たに返信することはできません。