web-dev-qa-db-fra.com

comment puis-je mettre en file d'attente ma feuille de style/s enfants après * chaque feuille de style/instruction parent?

J'utilise le thème d'œnologie bien écrit de Chip Bennett en tant que thème de mon propre enfant.

Dans mon processus de développement, j'ai découvert qu'il était difficile pour les personnes qui écrivent des thèmes pour enfants de contrôler les styles.

Je viens de découvrir que mon fichier principal.css est chargé avant chaque autre lien ou déclaration de feuille de style dans <head>, ce qui explique pourquoi je ne parvenais pas à remplacer certains styles Parent.

une étude plus approfondie du problème montre que différents styles et feuilles de style Parent peuvent être mis en file d'attente dans <head> à trois endroits; add_action('wp_print_styles',, add_action('wp_enqueue_scripts',, puis add_action('wp_head',.

pour que les choses restent simples, je prévois de créer deux feuilles de style. la première feuille principale 'style.css' n'inclurait que la commande @import url(), nécessaire pour charger la feuille de style principale d'œnologie.

la deuxième feuille de style contiendrait mes règles enfant. pour m'assurer qu'il est chargé après tout des autres règles, je le mettrais en file d'attente à l'aide de add_action( 'wp_head',.

cela semble-t-il raisonnable? ou existe-t-il une meilleure façon (plus correcte) de le faire?

btw, est-ce que quelqu'un sait ce que '/parent-theme/style.css? MRPreviewRefresh = 723' veux dire?

Mettre à jour

wp_enqueue_style () ne semble pas fonctionner dans wp_head ().

à votre santé,
Gregory

10
Gregory

le seul moyen de garantir que mes styles aient enfin le dernier mot dans la cascade était de les inclure à la fin de <head> via le hook wp_head. wp_enqueue ne fonctionne pas dans wp_head, j'ai donc dû faire écho directement au lien:

function gregory_enqueue_stylesheets() {
    $base = get_stylesheet_directory_uri();
    echo '<link rel="stylesheet" href="'.$base.'/style-gregory.css" type="text/css" media="all">';
    return;
}
add_action( 'wp_head', 'gregory_enqueue_stylesheets', 18 );

enfin, je peux définir mes styles avec une relative facilité et sans utiliser de hauts niveaux de spécificité, ni la règle! important, qui ne devrait être utilisée qu'en dernier recours.

WP a besoin d'un meilleur système de mise en file d'attente. every style, qu'il s'agisse d'un lien de fichier ou d'un style en ligne, doit être passé par le même point d'ancrage, ce qui permet à la priorité de déterminer leur ordre. de manière optionnelle, à des fins de débogage, il serait utile que le hook produise également les valeurs de priorité de chaque style, éventuellement sous forme commentée.

Mettre à jour

J'ai pu garder le contrôle des styles de mon thème Enfant tout en conservant la cascade originale du thème Parent (qui utilise une feuille de style principale, une sous-feuille de style et quelques instructions de style) en scindant ma feuille de style en deux, comme expliqué dans la question. Je n'utilise plus le hook wp_head (), mais plutôt le hook wp_enqueue_scripts () correct et standard avec un ordinal élevé pour que ma feuille de style soit chargée en dernier.

la feuille de style par défaut de mon thème:

/*
Theme Name: Oenology-Gregory
Template: oenology
Version: 20120506-0026
*/

@import url("/wp-content/themes/oenology/style.css");

la fonction pour mettre en file d'attente ma feuille de style principale:

function gregory_enqueue_stylesheets() {
    $base = get_stylesheet_directory_uri();
    wp_enqueue_style( 'style-gregory', $base.'/style-gregory.css' );
    return;
}
add_action( 'wp_enqueue_scripts', 'gregory_enqueue_stylesheets', 18 );

il y a cependant quelques déclarations de style générées par WP (c'est-à-dire, pas le thème parent) qui sont déclarées après ma feuille de style, et je devrai envisager d'utiliser des règles CSS de haute spécificité pour remplacer les règles me concerne ou cherche des crochets pour les désactiver, en particulier la règle body.custom-background.

merci à tous pour vos commentaires.

à votre santé,
Gregory

2
Gregory

Vous devriez always utilisez wp_enqueue_style() pour charger votre feuille de style et que les fonctions doivent être reliées au wp_enqueue_scripts hook avec s'exécute en tête . Je soupçonne que vous ne l'utilisiez pas, d'où votre problème. (À partir de WP 3.3, si wp_enqueue_style() est relié à autre chose, il émet un avis avec WP_Debug activé).

1
mrwweb