Ändern von wp-admin / widgets.php

11

Wir möchten die Widgets-Seite im Admin-Bereich etwas anders gestalten, hauptsächlich, um dem Site-Administrator zu helfen, zu verstehen, wo jedes Widget auf der Site angezeigt wird:

Geben Sie hier die Bildbeschreibung ein

Dazu müssen wir den HTML-Code ändern, den widgets.php rendert (es reicht nicht aus, nur das CSS zu ändern). Wie würden wir das tun, ohne den Kern zu berühren?

Lea Cohen
quelle
Wo würde das Bedienfeld zum Ziehen von Widgets mit dem obigen Ansatz platziert werden?
Sanchothefat
@sanchothefat darunter
Lea Cohen
Warum nicht einen Patch an den Core senden? Scheint eine lohnende Verbesserung zu sein ... Wenn Sie dann eine Seitenleiste registrieren, besteht ein zusätzlicher Parameter darin, einen Speicherort anzugeben. Wenn keine angegeben ist, wird davon ausgegangen, dass die Struktur so ist, wie sie jetzt ist (rechts)
Taylor Dewey,

Antworten:

7

Wenn Sie Ihr WordPress auf 3.3.1 aktualisieren, was Sie unbedingt tun sollten, verfügt jeder Widget-Bereich im Administrator jetzt über eine ID, mit der Sie über CSS zielen können. Dies sollte wirklich ausreichen. Ein Beispiel finden Sie unter http://core.trac.wordpress.org/ticket/18334 .

helenhousandi
quelle
4

Ich kann die Frage nicht aus dem Kopf bekommen, aber ich habe keine Zeit für eine vollständige Lösung. Also schreibe ich hier einfach meine Idee auf, dann setze ich ein kleines Kopfgeld.

  • Es ist eine Aktion 'widgets_admin_page'in wp-admin/widgets.phpüber dem anderen Inhalt. Hier können Sie ein Vorschaufenster platzieren.
    Beispielcode:

    add_action( 'widgets_admin_page', 'show_widget_preview' );
    function show_widget_preview()
    {
        $preview_widgets = $GLOBALS['wp_registered_sidebars'];
        unset ( $preview_widgets['wp_inactive_widgets'] );
    
        print '<div style="border:2px solid #ddf;padding:20px">'
        . '<pre>' . htmlspecialchars( print_r( $preview_widgets, TRUE ) ) . '</pre>'
        . '</div>';
    }

    Dadurch wird ein Array aller registrierten Seitenleisten ausgedruckt. Sie müssen durch alle Seitenleisten gehen, um die registrierten Widgets zu finden.

  • Um die Vorschau nützlich zu machen, benötigen Sie zwei Dateien: eine HTML-Vorlage und ein Stylesheet.
    Ich würde verwenden add_theme_support().
    Beispielcode für das Thema functions.php:

    add_theme_support( 
        'widget_preview', 
        array ( 
            'template'   => get_stylesheet_directory() . '/widget-preview.php', 
            'stylesheet' => get_stylesheet_directory() . '/widget-preview.css' 
        ) 
    );
  • In der show_widget_preview()Warteschlange befindet sich das Stylesheet und die Vorlage wird geladen. Rendern Sie die registrierten Seitenleisten in den vordefinierten Platzhaltern in widget-preview.php.

  • Aktualisieren Sie die Vorlage per AJAX, nachdem der Benutzer in einem Widget auf die Schaltfläche Speichern geklickt hat.

  • Herausforderungen: Berücksichtigen Sie den Eingabehilfenmodus, kleine Fenster und CSS-Konflikte. Zeigen Sie eine nützliche Meldung an, wenn keine Seitenleiste registriert ist (Seitenleistenbeschreibungen?). Was soll passieren, wenn ein Benutzer versucht, ein Widget in das Vorschaufenster zu ziehen? :) :)

Fuxia
quelle
Danke, dass du darüber nachgedacht hast, @toscho! Ich arbeite derzeit an anderen Projekten, muss aber auf dieses zurückkommen, und ich werde Ihre Lösung überprüfen und Sie wissen lassen. Danke noch einmal!
Lea Cohen
0

Die kurze Antwort lautet: Sie können nicht, nicht ohne den Kern zu berühren.

Sie können jedoch die Beschreibung jedes Widgetbereichs (den Text unter dem Titel des Widgetbereichs) in der Funktion register_sidebar festlegen.

Norcross
quelle