La dépendance de style de mise en file d’attente WordPress se charge dans le désordre

Publié par Jean-Michel le

Donc, je me suis construit un concaténateur de feuilles de style en file d’attente, pendant que cela fonctionne, ce que j’ai trouvé, c’est que les « dépendances » semblent être hors service … dans ce cas, je désenregistre et retire ma « personnalisée » feuille de style, enregistrer et mettre en file d’attente ma feuille de style concaténée, puis « re » enregistrer et « re » mettre en file d’attente ma feuille de style personnalisée en utilisant la poignée concaténée comme dépendance… et elle se charge toujours avant la feuille de style concaténée.

Des idées pourquoi cela peut se produire? Dans mon thème enfant, je demande « personnalisé » à la priorité par défaut, dans le thème parent, c’est là que j’effectue la concaténation, et mon action a la priorité la plus élevée possible.

Le code:

protected function concatenate_css( $_cache_time ) {
    add_action( 'wp_enqueue_scripts', function( ) use ( $_cache_time ) {
        // need our global
        global $wp_styles;

        // our css string holder
        $_css_string = '';

        // path to the theme
        $_theme_path = get_stylesheet_directory( );

        // uri to the theme
        $_theme_uri = get_stylesheet_directory_uri( );

        // new file path
        $_new_css = $_theme_path . '/style.concat.css';

        // force the order based on the dependencies
        $wp_styles -> all_deps( $wp_styles -> queue );

        // setup our exclusions
        $_exclude = array( 'custom', 'concatcss', );

        // loop through everything in our global
        foreach( $wp_styles -> queue as $_hndl ) {

            // get the source from the hanlde
            $_path = $wp_styles -> registered[$_hndl]->src;

            // if we have a "custom" handle, we do not want to process it, so ... skip it
            // we also do want to process any source that is not set
            if( ! in_array( $_hndl, $_exclude ) && $_path ) {

                // we also only want to do this for local stylehseets
                if ( strpos( $_path, site_url( ) ) !== false ) {

                    $_path = ABSPATH . str_replace( site_url( ), '', $_path );

                    // now that we have everything we need, let's hold the contents of the file in a string variable, while concatenating
                    $_css_string .= file_get_contents( $_path ) . PHP_EOL;

                    // now remove the css from queue
                    wp_dequeue_style( $_hndl );
                    // and deregister it
                    wp_deregister_style( $_hndl );

                }
            }
        }

        // dequeue and deregsiter any "custom" style
        wp_dequeue_style( 'custom' );
        wp_deregister_style( 'custom' );

        // now write out the new stylesheet to the theme, and enqueue it
        // check the timestamp on it, versus the number of seconds we are specifying to see if we need to write a new file
        if( file_exists( $_new_css ) ) {
            $_ftime = filemtime( $_new_css ) + ( $_cache_time );
            $_ctime = time( );
            if( ( $_ftime <= $_ctime ) ) {
                file_put_contents( $_new_css, $_css_string );
            }
        } else {
            file_put_contents( $_new_css, $_css_string );
        }

        wp_register_style( 'concatcss', $_theme_uri . '/style.concat.css', array( ), null );
        wp_enqueue_style( 'concatcss' );

        // requeue and reregister our custom stylesheet, using this concatenated stylesheet as it's dependency
        wp_register_style( 'custom', $_theme_uri . '/css/custom.css?_=' . time( ), array( 'concatcss' ), null );
        wp_enqueue_style( 'custom' );

    }, PHP_INT_MAX );

}

Capture d’écran de la source de la page

entrez la description de l'image ici

Solution n°1 trouvée

Enregistrez simplement votre script concaténé, mais ne le mettez pas en file d’attente.

    wp_register_style( 'concatcss', $_theme_uri . '/style.concat.css', array( ), null );

    // requeue and reregister our custom stylesheet, using this concatenated stylesheet as it's dependency
    wp_enqueue_style( 'custom', $_theme_uri . '/css/custom.css?_=' . time( ), array( 'concatcss' ), null );

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *