web-dev-qa-db-fra.com

Limiter le widget à une certaine barre latérale?

J'ai plusieurs "barres latérales", mais toutes n'ont pas la même taille. Tous les widgets ne tiennent pas dans toutes les barres latérales (par exemple, j'ai une "barre latérale de pied de page" dans laquelle le client peut placer des widgets personnalisés, mais ils sont larges et ne rentrent pas du tout dans la "vraie" barre latérale). Je veux donner une indication lorsqu'un widget est placé dans une barre latérale à laquelle il n'appartient pas (changez la couleur du texte de l'en-tête, par exemple). Quelle serait la meilleure façon de faire cela?

7
Jan Fabry

Je l'ai résolu en utilisant quelques CSS, similaire à mon astuce pour mettre en évidence mes propres widgets . Les zones de dépôt de la barre latérale sont div avec la classe widgets-sortable et elles ont la id de votre barre latérale. Vos widgets sont div's avec la classe widget, et et id de la forme widget-[global_counter]_[widget_key]-[widget_id]. Vous pouvez les combiner pour mettre en évidence des combinaisons correctes ou incorrectes.

Par exemple, j'ai une barre latérale appelée footer qui ne devrait contenir que des widgets larges. Ces widgets sont reconnaissables car leur identifiant comprend -wide-. Je veux ceux-ci en vert, et tous les autres en rouge avec une grève à travers.

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;
}
3
Jan Fabry

Il existe un hook widget_display_callback que vous pouvez utiliser pour remplacer le widget en fonction de la barre latérale et du widget (renvoie false si cela ne convient pas):

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

4
Denis de Bernardy

Je définirais probablement mes propres zones de widgets contenant tous les widgets qui y sont placés dans la zone d'administration et ne plaçais cette zone que dans un emplacement spécifique du thème.

0
tw2113