Warum ist wp_register_style () wichtig, während ich einen kompletten wp_enqueue_style () benutze?

Derzeit arbeite ich an einem Thema und habe einige Stile und Skripte in die Warteschlange gestellt. Als ich die Skripte in die wp_register_script() , habe ich zuerst wp_register_script() und dann mit wp_enqueue_script() – weil ich die Skripte in die richtige Reihenfolge bringen kann. Aber beim Einreihen der Stile habe ich nur den wp_enqueue_style() mit all seinen Parametern benutzt. Aber gerade jetzt habe ich eine Antwort von s_ha_dum erhalten, die besagt, dass die Verwendung von wp_register_style() das theme-freundliche Theme Kind machen würde – ich frage mich, ohne wp_register_style() ich nur wp_enqueue_style() und mein Theme funktioniert gut mit den eingereihten Styles. Ich habe sie eingereiht wie:

 add_action( 'wp_enqueue_scripts', 'wpse20131025_styles' ); function wpse20131025_styles(){ wp_enqueue_style( 'site-styles', get_template_directory_uri() . '/style.css', '', '', 'screen' ); wp_enqueue_style( 'menu-styles', get_template_directory_uri() . '/css/menu.css', '', '', 'screen and (min-device-width: 800px)' ); wp_enqueue_style( 'mobile-menu-styles', get_template_directory_uri() . '/css/mobile-menu.css', '', '', 'screen and (max-device-width: 799px)' ); } 

Während die wp_enqueue_style() alle Parameter hat, die in wp_register_style() ( $ handle, $ src, $ deps, $ ver, $ media ) vorhanden sind, warum sollte ich sie dann wiederholen? Oder, was genau ist der Zweck von wp_register_style() anders als wp_enqueue_style() ?

Solutions Collecting From Web of "Warum ist wp_register_style () wichtig, während ich einen kompletten wp_enqueue_style () benutze?"

Nehmen wir als Erstes an, dass das, was für Styles gültig ist, in Bezug auf diese functionen genau für Skripte gilt, aber es gibt einige Ausnahmen, die in der Antwort erklärt werden.

Der Hauptunterschied zwischen den wp_enqueue_* und den entsprechenden wp_register_* -functionen besteht darin, dass der erste Skripte / Stile zur Warteschlange hinzufügt, der zweite Skripte / Stile, die hinzugefügt werden sollen.

Sie wissen das wahrscheinlich schon, aber es gibt einen zweiten Unterschied; wp_register_* kann in jedem Hook verwendet werden, sogar in einem frühen Hook wie init , aber wp_enqueue_* sollte auf wp_enqueue_scripts hook (oder admin_enqueue_scripts für Backend) verwendet werden 1 .

Das typische Szenario, in dem Sie beide functionen verwenden, ist, wenn Sie Skripts / Styles auf theme init registrieren und sie dann auf einigen Seiten, z

 add_action('init', 'my_register_styles'); function my_register_styles() { wp_register_style( 'style1', get_template_directpry_uri() . '/style1.css' ); wp_register_style( 'style2', get_template_directpry_uri() . '/style2.css' ); wp_register_style( 'style3', get_template_directpry_uri() . '/style3.css' ); } add_action( 'wp_enqueue_scripts', 'my_enqueue_styles' ); function my_enqueue_styles() { if ( is_front_page() ) { wp_enqueue_style( 'style3' ); } elseif ( is_page_template( 'special.php' ) ) { wp_enqueue_style( 'style1' ); wp_enqueue_style( 'style2' ); } else { wp_enqueue_style( 'style1' ); } } 

Auf diese Weise ist das bedingte Einreihen besser lesbar und weniger ausführlich.

Wenn Sie einen oder mehrere der registrierten Styles / Scripts auch in das Backend einreihen möchten, können Sie das registrierte Handle in einer function verwenden, die admin_enqueue_scripts ohne alle Params erneut übergeben zu müssen.

wp_localize_script ist dies für Skripte nützlicher, weil wp_localize_script im vorherigen Szenario nach der wp_localize_script einmal aufgerufen werden kann und dann beim bedingten Enqueueing das Skript in die Warteschlange stellt, auch wenn es mehr als einmal verwendet wird: das hält den Code einfacher und DRY.

Wenn Sie ein Skript / einen Stil registrieren und sofort nachdem Sie es in die Warteschlange eingereiht haben, ist dies nur eine unnötige Aufgabe, die eigentlich vollständig vermieden werden kann:

 wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' ); wp_enqueue_style( 'style1' ); 

Es gibt keinen Vorteil, einen Stil (oder ein Skript) in diese wp_enqueue_style benutze einfach wp_enqueue_style mit allen Parametern von wp_enqueue_style und du bist fertig.

Der vorhergehende Satz gilt auch für die Kinderthema Freundschaft. Um einen Stil im wp_register_style Thema zu überschreiben, wenn der Elternteil wp_register_style unmittelbar gefolgt von wp_enqueue_style , müssen Sie den Stil wp_enqueue_style und sich erneut bei einer anderen URL registrieren. Wenn das übergeordnete wp_enqueue_style nur wp_enqueue_style , können Sie im wp_dequeue_style Thema wp_dequeue_style und den neuen Stil in die wp_dequeue_style stellen, sodass im untergeordneten Thema in beiden Fällen zwei Zeilen Code erforderlich sind.

Was jedoch sehr child theme friendly ist, ist das Wrappen der functionen, die Styles und Skripte in ein if ( ! function_exists( … auf diese Weise untergeordnetes Thema überschreiben und / oder übergeordnete Designs und Skripte an einer Stelle überschreiben):

 if ( ! function_exists( 'my_register_styles' ) ) { function my_register_styles() { wp_register_style( 'style1', get_template_directpry_uri() . '/style1.css' ); wp_register_style( 'style2', get_template_directpry_uri() . '/style2.css' ); wp_register_style( 'style3', get_template_directpry_uri() . '/style3.css' ); } } if ( ! function_exists( 'my_enqueue_styles ') ) { function my_enqueue_styles() { if ( is_front_page() ) { wp_enqueue_style( 'style3' ); } elseif ( is_page_template( 'special.php' ) ) { wp_enqueue_style( 'style1' ); wp_enqueue_style( 'style2' ); } else { wp_enqueue_style( 'style1' ); } } } 

Jetzt ist es im Child-Theme möglich, eine weitere function my_register_styles und / oder my_enqueue_styles zu schreiben und alle Styles zu ändern (falls nötig, natürlich), ohne Styles nacheinander abmelden / aus der Warteschlange nehmen zu müssen.


1 Hier ist ein weiterer Unterschied zu Skripts und Stilen: wp_enqueue_script kann im Hauptteil einer Seite verwendet werden (die typische Verwendung erfolgt in einem Shortcode) und das Skript wird in die Fußzeile eingefügt.