In Wordpress gibt es eine Funktion wp_get_sidebars_widgets()
, die ein multidimensionales Array aller registrierten Sidebar-IDs mit ihren untergeordneten Widget-IDs spuckt.PHParray traversal
Für Kontext ist dies ein Beispiel für die Ausgabe:.
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
)
)
I innerhalb eines Widgets dieses Code ist mit der ID der Seitenleiste zu finden, sie lebt in Zum Beispiel kann es nur ein ‚Widgets seine -Newsletter-11 ', und es lebt im Widgetbereich' sidebar-requests '.
Ich habe Probleme beim Speichern der ID dieses Widget-Bereichs. Hier ist eine einfache Version des Codes, den ich versuche zu verwenden.
$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;
}
Am Ende dieser, die gespeicherte Variable, bleibt $this_widget_area_id
leer.
Was mache ich falsch?
Sie müssen eine weitere Schleife in Ihrer Foreach hinzufügen. Das von '$ wp_get_sidebars_widgets()' zurückgegebene Array ist 2 Ebenen tief. So, wie Ihr Code derzeit steht, vergleichen Sie ein Array mit Ihrer Zeichenfolge "widget-newsletters-11" – WillardSolutions
Ah! Perfekt! Ich habe 'foreach ($ widget_ids als $ widget_order => $ widget_id) hinzugefügt { if ($ widget_id == $ this_widget_id) $ this_widget_area_id = $ widget_area; } 'und alles funktioniert gut – idealbrandon
Bevor Sie gehen diesen Code zu prod verpflichten, sollten Sie wirklich Ihre Vorgehensweise zu überdenken. wp_get_sidebars_widgets ist NICHT für diesen Zweck gedacht. Lesen Sie die Dokumentation: https://developer.wordpress.org/reference/functions/wp_get_sidebars_widgets/ – vlasits