La dépendance de style de mise en file d’attente WordPress se charge dans le désordre
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
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 );
0 commentaire