Je crée un thème enfant (mon premier depuis plus de 3 ans) d'un thème WooCommerce et j'ai quelques problèmes avec le fait que certains styles de mise en page sont mis en file d'attente dans le thème parent et je dois ajouter !important
à tous les styles que je veux remplacer.
Il s'agit du code de mise en file d'attente actuel dans les thèmes parents functions.php;
if ( ! is_admin() ) { add_action( 'wp_enqueue_scripts', 'woo_load_frontend_css', 20 ); }
if ( ! function_exists( 'woo_load_frontend_css' ) ) {
function woo_load_frontend_css () {
wp_register_style( 'theme-stylesheet', get_stylesheet_uri() );
wp_register_style( 'woo-layout', get_template_directory_uri() . '/css/layout.css' );
wp_enqueue_style( 'theme-stylesheet' );
wp_enqueue_style( 'woo-layout' );
} // End woo_load_frontend_css()
}
Ce que je dois faire, c'est charger le css du thème enfant APRÈS le fichier layout.css
chargé par le thème parent.
J'ai eu le même problème et la réponse de l'épilepsie m'a mis sur le droit chemin.
J'utilise wootheme "function" et il doit charger le fichier style.css avant un autre fichier CSS appelé layout.css. Cet ordre doit donc être conservé lors du chargement du fichier style.css du thème enfant.
En résumé, pour éviter d'utiliser !important
pour remplacer tous les styles, nous devons charger les fichiers de style dans l'ordre suivant:
Pour y parvenir, nous devons changer:
Modifiez ce fichier pour importer les fichiers CSS du thème parent dans le bon ordre:
@import url("../function/style.css");
@import url("../function/css/layout.css");
Ajoutez ensuite ceci à votre fichier functions.php pour éviter de recharger layout.css (woo-layout) et de charger le fichier css du thème enfant (style.css):
if ( ! function_exists( 'woo_load_frontend_css' ) ) {
function woo_load_frontend_css () {
// comment this, as we will be loading this css with a different priority
//wp_register_style( 'theme-stylesheet', get_stylesheet_uri() );
// we can register the style here for future manipulation...
wp_register_style( 'woo-layout', get_template_directory_uri() . '/css/layout.css' );
// comment this, as we will be loading this css with a different priority
//wp_enqueue_style( 'theme-stylesheet' );
// ... but we will not be enqueuing it, instead we will import it in the child theme's style.css
//wp_enqueue_style( 'woo-layout' );
} // End woo_load_frontend_css()
}
Vous pouvez également charger une fonction vide comme celle-ci pour obtenir le même effet:
if ( ! function_exists( 'woo_load_frontend_css' ) ) {
function woo_load_frontend_css () {
} // End woo_load_frontend_css()
}
Puis inscrivez-vous et ajoutez le css de votre thème enfant en l'ajoutant au fichier functions.php de votre thème enfant juste après le function woo_load_frontend_css
précédent:
function cherrypick_child_enqueue_css()
{
wp_register_style( 'theme-stylesheet', get_stylesheet_uri() );
wp_enqueue_style( 'theme-stylesheet' );
}
add_action( 'wp_enqueue_scripts', 'cherrypick_child_enqueue_css', 99 ); // using priority 99 we make sure the child theme style.css will be loaded after all other css
Maintenant, tous les fichiers de feuilles de style seront chargés dans le bon ordre.
Comme la fonction Woo est encapsulée dans if( ! function_exists('function_name') )
, vous pouvez la remplacer dans le fichier functions.php
de votre thème enfant.
Ajoutez la fonction au fichier, puis ajustez l'ordre de la file d'attente pour charger style.css
après layout.css
.
if ( ! function_exists( 'woo_load_frontend_css' ) ) {
function woo_load_frontend_css () {
wp_register_style( 'theme-stylesheet', get_stylesheet_uri() );
wp_register_style( 'woo-layout', get_template_directory_uri() . '/css/layout.css' );
wp_enqueue_style( 'woo-layout' );
//load stylesheet after layout.
wp_enqueue_style( 'theme-stylesheet' );
} // End woo_load_frontend_css()
}