web-dev-qa-db-de.com

Warum ist wp_register_style () wichtig, wenn ich ein vollständiges wp_enqueue_style () verwende?

Derzeit arbeite ich an einem Thema und habe einige Stile und Skripte in die Warteschlange gestellt. Als ich die Skripte in die Warteschlange gestellt habe, habe ich zuerst wp_register_script() und dann wp_enqueue_script() in die Warteschlange gestellt - weil ich weiß, dass dies der richtige Weg ist, um die Skripte in die Warteschlange zu stellen. Aber beim Einreihen der Stile habe ich nur die wp_enqueue_style() mit all ihren Parametern verwendet. Aber gerade habe ich eine Antwort von s_ha_dum bekommen, die sagt, dass die Verwendung von wp_register_style() das Thema kindgerecht macht - ich frage mich, ohne die wp_register_style() verwende ich nur die wp_enqueue_style() und mein Thema funktioniert gut mit den eingereihten Stilen. Ich stellte sie in eine Warteschlange 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 in wp_register_style() enthaltenen Parameter enthält ( $ handle, $ src, $ deps, $ ver, $ media ), warum sollte ich sie dann wiederholen? Oder was genau ist der Zweck von wp_register_style() außer wp_enqueue_style()?

16
Mayeenul Islam

Nehmen wir zunächst an, dass in Bezug auf diese Funktionen das, was für Stile gilt, genau für Skripte gilt. In der Antwort werden jedoch einige Ausnahmen zum Gegenteil erläutert.

Der Hauptunterschied zwischen wp_enqueue_* und den jeweiligen wp_register_*-Funktionen besteht darin, dass die erste der Warteschlange Skripte/Stile hinzufügt, die zweite bereitet Skripte/Stile zum Hinzufügen vor.

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

Das typische Szenario für die Verwendung beider Funktionen ist, wenn Sie Skripte/Stile bei 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_directory_uri() . '/style1.css' );
    wp_register_style( 'style2', get_template_directory_uri() . '/style2.css' );
    wp_register_style( 'style3', get_template_directory_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 die bedingte Einreihung besser lesbar und weniger ausführlich.

Wenn Sie einen oder mehrere der registrierten Stile/Skripte auch im Backend einreihen möchten, können Sie das registrierte Handle in einer Funktion verwenden, die admin_enqueue_scripts einbindet, ohne alle Parameter erneut übergeben zu müssen.

Sicher ist dies für Skripte nützlicher, da wp_localize_script im vorherigen Szenario nach der Skriptregistrierung einmal aufgerufen werden kann und beim bedingten Einreihen nur das Skript in die Warteschlange gestellt wird, auch wenn es mehrmals verwendet wird: Dadurch wird der Code einfacher und trockener.

Wenn Sie ein Skript/einen Stil registrieren und ihn direkt nach dem Einreihen in die Warteschlange stellen, ist dies nur eine unnötige Aufgabe, die vollständig vermieden werden kann:

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

Es hat keinen Vorteil, einen Stil (oder ein Skript) in diese Reihenfolge zu bringen. Verwenden Sie einfach wp_enqueue_style mit allen Parametern von wp_enqueue_style, und schon sind Sie fertig.

Der vorige Satz gilt auch für das Thema Kinderfreundschaft. Um einen Stil im untergeordneten Design zu überschreiben, müssen Sie den Stil abmelden und erneut unter einer anderen URL registrieren, wenn das übergeordnete Element wp_register_style unmittelbar gefolgt von wp_enqueue_style verwendet. Wenn das übergeordnete Element nur wp_enqueue_style verwendet, können Sie im untergeordneten Thema wp_dequeue_style verwenden und den neuen Stil einreihen. Im untergeordneten Thema benötigen Sie in beiden Fällen 2 Codezeilen.

Sehr kinderfreundlich ist es jedoch, die Funktionen, die Stile und Skripte einreihen und/oder registrieren, in einen if ( ! function_exists( zu packen. Auf diese Weise können Kinder Stile und Skripte von Elternthemen an einer Stelle überschreiben:

if ( ! function_exists( 'my_register_styles' ) ) {
    function my_register_styles() {
        wp_register_style( 'style1', get_template_directory_uri() . '/style1.css' );
        wp_register_style( 'style2', get_template_directory_uri() . '/style2.css' );
        wp_register_style( 'style3', get_template_directory_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 untergeordneten Design möglich, eine andere my_register_styles- und/oder my_enqueue_styles-Funktion zu schreiben und alle Stile zu ändern (falls erforderlich, natürlich), ohne die Stile einzeln abmelden/aus der Warteschlange entfernen zu müssen.


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

29
gmazzap