Wordpressには、アクティブなウィジェットIDを持つすべての登録サイドバーIDの多次元配列を吐き出す関数wp_get_sidebars_widgets()
があります。PHParray traversal
コンテキストの場合、これはサンプル出力です:
Array
(
[wp_inactive_widgets] => Array
(
)
[sidebar-requests] => Array
(
[0] => widget-demographics-4
[1] => recent-posts-7
[2] => widget-newsletter-11
)
[sidebar-team] => Array
(
[0] => widget-sidebar-list-6
[1] => widget-donate-2
)
)
私はそれがに住んでいるサイドバーのIDを見つけるために、ウィジェットの内部でこのコードを使用していますたとえば、一つだけ「ウィジェットが存在することができます。 -newsletter-11 'と呼ばれ、' sidebar-requests 'ウィジェット領域内に存在します。
このウィジェットのIDの格納に問題があります。ここでは、私が使用しようとしているコードの単純なバージョンです。この終わりに
$this_widget_id = 'widget-newsletter-11';
$this_widget_area_id;
$all_widgets = wp_get_sidebars_widgets();
foreach ($all_widgets as $widget_area => $widget_id) {
if ($widget_id == $this_widget_id)
$this_widget_area_id = $widget_area;
}
、格納された変数、$this_widget_area_id
は空のまま。
私は間違っていますか?
foreach内に別のループを追加する必要があります。 '$ wp_get_sidebars_widgets()'によって返される配列は2レベル深いです。だからあなたのコードが現在立っているので、配列を文字列 "widget-newsletters-11"と比較しています – WillardSolutions
ああ!完璧! {$ widget_id == $ this_widget_id} $ this_widget_area_id = $ widget_areaのように、 'foreach($ widget_ids as $ widget_order => $ widget_id){ if($ widget_id == $ this_widget_id)を追加しました。 } 'すべて正常に動作します – idealbrandon
このコードを実行する前に、実際にアプローチを考え直す必要があります。 wp_get_sidebars_widgetsはこの用途に使用されるものではありません。 文書を読む: https://developer.wordpress.org/reference/functions/wp_get_sidebars_widgets/ – vlasits