情報ありがとうございました。
教えてもらったキーワードで調べてみました。
このような理解でよろしいでしょうか?
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 で調べておかないとダメみたいですね。