Bannt bestimmte Widgets aus bestimmten Sidebars

Ich habe mehrere Seitenleisten in dem Thema, das ich entwickle. Einige von ihnen sind entworfen, um nur ein paar Widget-Typen zu halten. Also versuche ich herauszufinden, wie man andere Widgets ohne ein Plugin hält.

Nach vielem Googeln gibt es meines Erachtens nur zwei Möglichkeiten:

  1. Verwenden Sie die jquery-Widgets-Verwaltungsseite, um das Ziehen und Ablegen bestimmter Widgets in bestimmte Widgetbereiche zu verhindern. In einer perfekten Welt wird der Benutzer eine Art Nachricht sehen, die besagt, dass dieses spezielle Widget in diesem bestimmten Widget-Bereich nicht erlaubt ist.
  2. Verwenden Sie wp ‘sidebars_widgets’ Filter, um Widgets serverseitig zu entfernen.

Der erste klingt nach einem besseren Weg, meistens performant. Was denken Sie? Obwohl ich keine funktionierende Lösung gefunden habe, reicht mein Wissen nicht aus. Leider reicht mein PHP-Wissen natürlich auch nicht aus, um die Lösung zu lösen. Folgendes habe ich:

add_filter( 'sidebars_widgets', 'wp150734_code_disable_widgets' ); function wp150734_code_disable_widgets( $sidebars_widgets ) { // This code works for one sidebar & one widget : $allowed_widget = 'wp150734_widget_social'; $sidebar_to_check = 'wp150734_widgets_navbar'; // But I want to check the array of sidebars with allowed widgets: $sidebars_to_check = array( // allowed widgets in 'wp00734_widgets_navbar' 'wp150734_widgets_navbar' => array( 'widget_search', 'widget_text', 'wp150734_widget_social' ), // allowed widgets in 'wp00734_widgets_footer' 'wp00734_widgets_footer' => array( 'widget_search', 'widget_text', 'wp00734_widget_social' ) ); foreach ( $sidebars_widgets as $sidebars_key=>$sidebars_widget ) { // Check if we even need to check this sidebar if ( $sidebars_key != $sidebar_to_check ) continue; if ( $sidebars_widget ) { foreach ( $sidebars_widget as $k=>$v ) { // Look for our custom widget and unset all other widgets from the $sidebars_widgets array if ( stripos( $v, $allowed_widget ) === false ) { unset( $sidebars_widgets[$sidebars_key][$k] ); } } } } return $sidebars_widgets; }; 

Was denkt ihr? Ich fühle mich wie jQuery Lösung wäre besser, aber kann nichts ähnliches finden.

EDIT: Ich habe 2-3 benutzerdefinierte Widgets zusätzlich zu allen Standard. Ich möchte, dass alle diese Widgets in allen registrierten Widgetbereichen normal funktionieren. Jetzt habe ich eine Top-Navbar im Thema. Es ist entworfen, um einige Daten zu halten. Wie Menüs, soziale Symbole, Suche und Text in der gewählten Reihenfolge. Da ich bereits alles in der Form von Widgets habe, die nachbestellt werden können, klingt es nach einer logischen Idee, einen benutzerdefinierten Widgetbereich in der Navigationsleiste zu registrieren und den Benutzer Widgets auswählen und neu anordnen zu lassen. Keine Notwendigkeit, die functionalität zu duplizieren – Widgets bieten es bereits out-of-the-box. Das einzige Problem ist, dass nicht alle Widgets in der Navbar sitzen.

Solutions Collecting From Web of "Bannt bestimmte Widgets aus bestimmten Sidebars"

Du überdenkst es. Das Konzept der Widgets ist so angelegt, dass es zwischen Widget-Bereichen (AKA-Sidebars) übertragbar ist. Wenn ein Widget nicht übertragbar ist, ist es kein echtes WordPress-Widget.

Jetzt erstellen Sie Ihr eigenes Framework von Widgets klingen wie eine nicht angenehme Idee. Zusätzlich zur Bekämpfung des WordPress-corecodes werden Sie feststellen, dass Sie mit den etablierten Benutzererwartungen bezüglich Widgets zu kämpfen haben.

Sie haben also grundsätzlich zwei Optionen, nennen Sie es “Batrarys Sidebars und Widgets”, um dem Benutzer zu signalisieren, dass sie keine echten WordPress-Widgets sind, und replizieren Sie den WordPress-corecode, um sie zu verwalten. Oder fragen Sie sich selbst, warum Sie minderwertige Widgets schreiben und Ihren Entwurf und Code reparieren.

Die dritte und wahrscheinlich einfachste Option besteht darin, den Benutzer einfach machen zu lassen, was er will, und sich selbst davon zu überzeugen, dass die Widgets nicht funktionieren. Legen Sie dafür eine entsprechende Dokumentation vor.