it-swarm.com.de

Verbanne bestimmte Widgets aus bestimmten Seitenleisten

Ich habe mehrere Seitenleisten in dem Thema, das ich entwickle. Einige von ihnen sind nur für wenige Widget-Typen ausgelegt. Also versuche ich herauszufinden, wie man andere Widgets fernhält, ohne ein Plugin zu verwenden.

Nach langem googeln gibt es meines erachtens nur 2 möglichkeiten:

  1. Verwenden Sie jquery auf der Widget-Administrationsseite, um das Ziehen und Ablegen bestimmter Widgets in bestimmte Widgetbereiche zu verhindern. In einer perfekten Welt wird dem Benutzer eine Nachricht angezeigt, die besagt, dass dieses bestimmte Widget in diesem bestimmten Widget-Bereich nicht zulässig ist.
  2. Verwenden Sie den Filter wp 'sidebars_widgets', um die Widgets-Serverseite zu entfernen.

Klingt zunächst nach einem besseren Weg, meist in Bezug auf die Leistung. Was denkst du? Obwohl ich keine funktionierende Lösung gefunden habe und meine jquery Kenntnisse nicht ausreichen. Leider reicht mein PHP Wissen natürlich auch nicht aus, um die zweite Lösung zu finden. 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, kann aber nichts im Zusammenhang finden.

BEARBEITEN: Ich habe 2-3 benutzerdefinierte Widgets zusätzlich zu allen Standard. Ich möchte, dass all diese Widgets in allen registrierten Widgetbereichen normal funktionieren. Jetzt habe ich eine Top-Navigationsleiste im Theme. Es ist so konzipiert, dass es einige Daten enthält. Wie Menüs, soziale Symbole, Suche und Text in der gewählten Reihenfolge. Da ich bereits all das in Form von Widgets habe, die nachbestellt werden können, klingt es nach einer logischen Idee, einen benutzerdefinierten Widgetbereich in der Navigationsleiste zu registrieren und dem Benutzer zu überlassen, Widgets auszuwählen und neu zu ordnen. Die Funktionalität muss nicht dupliziert werden - Widgets bieten sie bereits ab Werk an. Das einzige Problem ist, dass nicht alle Widgets so konzipiert sind, dass sie in der Navigationsleiste angezeigt werden.

2
Nikita

Sie überdenken es. Das Konzept von Widgets soll zwischen Widget-Bereichen (AKA-Seitenleisten) übertragbar sein. Wenn ein Widget nicht übertragbar ist, ist es einfach kein echtes WordPress-Widget.

Das Erstellen eines eigenen Widgets-Frameworks klingt nach einer unangenehmen Idee. Zusätzlich zum Kampf gegen den WordPress-Kerncode werden Sie feststellen, dass Sie den etablierten Benutzererwartungen bezüglich Widgets entgegenwirken.

Sie haben also grundsätzlich zwei Möglichkeiten: Nennen Sie es "Baitars Seitenleisten und Widgets", um dem Benutzer zu signalisieren, dass es sich nicht um echte WordPress-Widgets handelt, und replizieren Sie den WordPress-Kerncode, um sie zu verwalten. Oder fragen Sie sich einfach, warum Sie minderwertige Widgets schreiben, und korrigieren Sie Ihr Design und Ihren Code.

Die dritte und wahrscheinlich einfachste Möglichkeit besteht darin, dem Benutzer zu überlassen, was er will, und ihm selbst zu zeigen, dass die Widgets nicht funktionieren. Stellen Sie einfach die richtige Dokumentation dafür bereit.

1
Mark Kaplun