Widget auf bestimmte Seitenleiste beschränken?

7

Ich habe mehrere "Seitenleisten", aber nicht alle haben die gleiche Größe. Nicht alle Widgets passen in alle Seitenleisten (zum Beispiel habe ich eine "Fußzeilen-Seitenleiste", in der der Client benutzerdefinierte Widgets platzieren kann, aber sie sind breit und passen überhaupt nicht in die "echte" Seitenleiste). Ich möchte einen Hinweis geben, wann ein Widget in einer Seitenleiste platziert wird, zu der es nicht gehören würde (ändern Sie beispielsweise die Farbe des Kopfzeilentextes). Was wäre der beste Weg, dies zu tun?

Jan Fabry
quelle

Antworten:

4

Es gibt einen widget_display_callback-Hook, mit dem Sie das Widget basierend auf der Seitenleiste und dem Widget überschreiben können (geben Sie false zurück, wenn dies unangemessen ist):

http://core.trac.wordpress.org/browser/trunk/wp-includes/widgets.php?rev=15590#L180

Denis de Bernardy
quelle
Aber das verbirgt die Seitenleiste nur, wenn Sie sie auf der Vorderseite anzeigen? Oder betrifft es auch den Admin-Bereich?
Jan Fabry
1
Es versteckt es nur auf der Vorderseite. Sie können es dann verwenden, um etwas wie "Entschuldigung, falsche Seitenleiste. Bitte platzieren Sie dieses Widget an einer anderen Stelle." Bedingt wiederzugeben. und dann falsch gegen Kaution zurück. Im Admin-Bereich gibt es keinen Haken, der dasselbe tut. Ich habe versucht, Andrew zu überreden, ähnliche Funktionen für den Widgets-Bildschirm festzulegen, aber er bestand darauf, dass ich stattdessen CSS und JS verwenden sollte, um das DOM zu manipulieren. (Ich brauchte dieses Zeug für mein Widget-Kontext-Plugin, das in einigen Seitenleisten irrelevant ist.)
Denis de Bernardy
3

Ich habe es mit CSS gelöst, ähnlich wie bei meinem Trick, meine eigenen Widgets hervorzuheben . Die Drop-Bereiche der Seitenleiste gehören divzur Klasse widgets-sortableund haben die idIhrer Seitenleiste. Ihre Widgets sind divmit Klasse widgetund und idvon der Form widget-[global_counter]_[widget_key]-[widget_id]. Sie können diese kombinieren, um richtige oder falsche Kombinationen hervorzuheben.

Zum Beispiel habe ich eine Seitenleiste namens footer, die nur breite Widgets enthalten sollte. Diese Widgets sind erkennbar, weil ihre ID enthält -wide-. Ich möchte diese in Grün und alle anderen in Rot mit einem Durchschlag.

add_action('admin_print_styles-widgets.php', 'print_widget_hint_style');
function print_widget_hint_style()
{
    echo <<<EOF
<style type="text/css">
/* Less specific rule for all widgets */
div.widgets-sortables[id*=-footer] div.widget .widget-title
{
    color: red;
    text-decoration: line-through;
}

/* More specific rule for correct widgets */
div.widgets-sortables[id*=-footer] div.widget[id*=-wide-] .widget-title
{
    color: green;
}
</style>
EOF;
}
Jan Fabry
quelle
0

Ich würde wahrscheinlich meine eigenen Widget-Bereiche definieren, in die alle Widgets im Admin-Bereich eingefügt werden, und diesen Widget-Bereich nur an einer bestimmten Stelle im Thema platzieren.

tw2113
quelle
Ich mache das und habe Widget-Bereiche namens "Fußzeile" und "Seitenleiste", die ich an der bestimmten Stelle in den Vorlagen verwende. Die Fußzeile ist jedoch viel breiter als die Seitenleiste, sodass für die Fußzeile erstellte Widgets nicht in die Seitenleiste passen. Deshalb möchte ich einen Hinweis, wenn Sie ein "breites" Widget in einem "kleinen" Widget-Bereich ablegen. Oder fehlt mir etwas in Ihrer Antwort?
Jan Fabry
Nein, ich habe nichts verpasst. Mein nächster Vorschlag ist, obwohl es etwas mehr Arbeit erfordern würde, eigene Widgets zu erstellen, die an Ihrem spezifischen Ort verwendet werden können. Alle vordefinierten werden in den Kerndateien gespeichert. Auf diese Weise können Sie ihre Breite und so weiter steuern.
Tw2113