Einzelne Widgets pro Seite

8

Auf meiner Wordpress-Site (nur Seiten, keine Beiträge) muss eine Reihe von statischen Blobs in eine Seitenleiste eingefügt werden. Wir könnten diese "Blobs" als Widgets bezeichnen / treamen. Zumindest haben sie einen festen HTML-Inhalt wie "Teaser1", "Teaser2", "Haftungsausschluss", "Foo-Richtlinie" ...

Was ich brauche, ist, sie für jede Seite anders anzuordnen. Es geht also nicht nur um "Single" vs. "Archive", sondern wirklich um "Produktseite A" vs. "Produktseite B" vs. "Über uns" vs. "Nutzungsbedingungen" ...

Ich habe über benutzerdefinierte Meta-Boxen nachgedacht, um sie auf der Seite des einzelnen Editors ein- und auszuschalten wp-admin/post.php?post=196&action=edit, aber natürlich wäre der Drag-and-Drop-Komfort und die einfache Bestellbestimmung regulärer Widgets noch besser.

Außerdem bin ich mir nicht sicher, wie ich diese statischen Schnipsel pflegen (hinzufügen, entfernen, bearbeiten (HTML-Textansicht reicht aus) ...

Für meine Benutzer wäre es intuitiver, wenn sie auf der einzelnen Bearbeitungsseite ( wp-admin/post.php?post=123&action=edit) "Ich möchte Widget 1,2,5,8" aktivieren, anstatt zum jeweiligen Widget / Snippet zu wechseln und ihm zu sagen, dass Sie auf erscheinen müssen Die folgenden Seiten "Ich verstehe, wie Display-Widgets funktionieren ...

Idealerweise hätte ich eine Einstellungsseite für Widgets (oder Module oder Snippets), auf der ich Widgets hinzufügen / bearbeiten / löschen kann. Und dann auf der einzelnen Bearbeitungsseite rechts eine Metabox, um sie hinzuzufügen und in die richtige Reihenfolge zu ziehen.

Frank Nocke
quelle
Während interessante Frage, scheint es auch sehr, sehr benutzerdefinierte Anwendungsfall zu sein. Ihre Wahl wird wahrscheinlich entweder mit einem allgemeineren Ansatz wie den vorgeschlagenen Plugins (ich werde auch WooSidebars einwerfen) oder mit der Einstellung von jemandem von Grund auf neu getroffen.
Rarst

Antworten:

5

Sie können dies mit dem Widget-Kontext- Plugin oder dem Widget-Logik- Plugin tun .

Sie funktionieren gut. Ich bevorzuge den Widget-Kontext, weil er flexibler ist.

Lucas García
quelle
3

Was ist mit etwas Einfachem wie einem Plugin?

Ich benutze Widgets Controller und es ist gut.

Ein Plugin, mit dem Sie steuern können, ob Widgets in WordPress-Kategorien, Posts und Seiten angezeigt oder ausgeblendet werden sollen.

kat_indo
quelle
1

Ich habe dies für eine bestimmte Vorlage auf einer Site getan. Jede Seite mit dieser Vorlage verfügt über eine eigene Widget-Zone, die ein oder mehrere Widgets speziell für diese Seite zulässt. Es gibt mehrere Plugins, die Ihnen eine dynamische Widget-Logik bieten. Dieser Ansatz ist jedoch zielgerichteter und passt möglicherweise zu Ihrem Problem (meiner auf dieser speziellen Website).

Für den Administrator müssen alle Widget-Zonen registriert sein, damit Sie Widgets für diese Seiten zuweisen und konfigurieren können:

// dynamically add some widget zones for pages using some templates
add_action('sidebar_admin_setup', 'wpse_76601_actionSidebarAdminSetup');

/**
* handle action sidebar_admin_setup to check for dynamically created sidebars
* and make sure they're registered
*/
function wpse_76601_actionSidebarAdminSetup() {
    global $post;
    global $wp_registered_sidebars;

    // find all pages that use template with dynamic widget zone
    $query = new WP_Query(array(
        'meta_key' => '_wp_page_template',
        'meta_value' => 'wpse-template-dept.php',
        'post_type' => 'page',
        'nopaging' => true,
        'orderby' => 'title',
        'order' => 'ASC',
    ));

    while ($query->have_posts()) {
        $query->the_post();

        $id = "wpse-{$post->ID}-aside";

        // register any that aren't already registered
        if (!isset($wp_registered_sidebars[$id])) {
            register_sidebar( array(
                'name' => $post->post_title . ' Asides',
                'id' => $id,
                'description' => 'Aside widgets for page ' . $post->post_title,
                'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
                'after_widget' => '</li>',
                'before_title' => '<h3 class="widget-title">',
                'after_title' => '</h3>',
            ) );
        }
    }
    wp_reset_postdata();
}

Dann muss in der Seitenvorlage die Widget-Zone erneut registriert werden, bevor sie aufgerufen wird. Fügen Sie einfach oben in der Vorlage vor dem Aufruf von hinzu wp_head(), und es wird nur für diese bestimmte Seite registriert.

function template_widgetsInit() {
    global $post;

    register_sidebar( array(
        'name' => $post->post_title . ' Asides',
        'id' => "wpse-{$post->ID}-aside",
        'description' => "Aside widgets for page {$post->post_title}",
        'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
        'after_widget' => '</li>',
        'before_title' => '<h3 class="widget-title">',
        'after_title' => '</h3>',
    ) );
}
template_widgetsInit();
webaware
quelle
0

Sprechen Sie darüber, sie neu zu ordnen oder einfach umzuschalten, welche pro Seite angezeigt werden? Sie könnten sicherlich eine Taxonomie hinzufügen und jedes Widget auf das Vorhandensein dieses Begriffs achten lassen (z. B. in sidebar.php).

Beispielsweise könnte die registrierte Taxonomie als "Widget-Präsenz" bezeichnet werden und Begriffe wie Widget 1, Widget 3, Über uns Text, Foo-Leiste enthalten.

Auf einer Seite wird ausgewählt, welche Begriffe sie enthält.

In der Seitenleiste haben Sie einige bedingte Anweisungen, die überprüfen, welche Begriffe eine bestimmte Seite enthält, und Vorlagenteile oder bestimmte Widgets oder Codeblöcke laden, die korrelieren. Sinn ergeben?

Ich könnte ein spezifischeres Beispiel vorbereiten, wenn Sie genauere Angaben machen möchten.

GhostToast
quelle
0

Könnte nicht jede Seite eine andere Seitenvorlage haben und jede dieser Seitenvorlagen ein anderes Menü? Ich gehe davon aus, dass die Anzahl der Menüs, die Sie erstellen können, begrenzt ist. Dies wäre die größte Einschränkung.

Don Zacharias
quelle
0

Ich habe eine Website mit den gleichen Anforderungen erstellt. Ich benutze eigentlich nur das Plugin "Widget Logic"

http://wordpress.org/extend/plugins/widget-logic/

Es erstellt ein Textfeld in jedem Widget, das bedingte Wordpress-Tags verwendet. Wenn ich sie neu anordnen musste, erstellte ich mehr als eines der Widgets, die an verschiedenen Orten benötigt wurden. Es war eine schnelle und einfache Lösung.

Leon

Leon Francis Shelhamer
quelle