web-dev-qa-db-de.com

Wie verwende ich WP_Term mit (Menü-) Argumenten im wp_nav_menu?

Ich versuche die wp_nav_menu-Funktion zu verstehen und bin mit ihren Argumenten einverstanden, aber mit WordPress-Status kann ich int, string und WP_Term mit der menu-Taste verwenden. Ich muss wissen, wie man den WP_Term damit verwendet, weil WordPress nur die Kernklasse WP_Term anbietet. Sie können das Konzept einfach erklären, wenn Sie möchten. Warum und was ist das Ergebnis der Verwendung?

1
Mohamed Omar

Hintergrund

Wie Sie bereits wissen, übernimmt die Funktion wp_nav_menu() ein Array $args, da das Argument & menu einer der Schlüssel zu diesem $args-Array ist.

Der Schlüssel menu für das Argument $args ist definiert als:

(int | string | WP_Term) Gewünschtes Menü. Akzeptiert (in der richtigen Reihenfolge) ID, Slug, Name und Menüobjekt.

Wenn Sie sich nun eingehend mit der Implementierung von wp_nav_menu() befassen, werden Sie feststellen, dass es sich um eine int id , string name , string slug oder objectWP_Term, es wird immer der WP_Term abgerufen object für die entsprechende Menü-ID | name | Slug vor dem Erstellen des Menüs.

Beispiel: Wenn Sie ein Menü mit id 3, name My Menu und slug my-menu haben; Sie können dieses Menü mit einem der folgenden Codes hinzufügen:

    // with id: 3
    wp_nav_menu( array(
        'menu'           => 3
    ) );

    // with name: My Menu
    wp_nav_menu( array(
        'menu'           => "My Menu"
    ) );

    // with slug: my-menu
    wp_nav_menu( array(
        'menu'           => "my-menu"
    ) );

Auch wenn Sie das Argument menu nicht angeben, wird versucht, das Objekt WP_Term aus anderen Argumenten wie theme_location abzurufen.

Beispiel: Angenommen, die Menüposition top wurde mit der Funktion register_nav_menus() in der functions.php-Datei Ihres Themas registriert, und das Menü mit dem Namen My Menu wurde der top-Position von Ihrem WP Admin Panel . In diesem Fall können Sie dasselbe Menü aufrufen, indem Sie Folgendes verwenden:

    wp_nav_menu( array(
        'theme_location' => 'top'
    ) );

In jedem der oben genannten Fälle ruft die Funktion wp_nav_menu() das Objekt WP_Term ab, bevor das Menü generiert wird. Dazu wird die Funktion wp_get_nav_menu_object() verwendet.

Implementierung

Anstelle von theme_location argument oder menu argument als int id oder string name | slug können Sie das entsprechende WP_Term-Objekt direkt bereitstellen.

Eine Möglichkeit zum Abrufen des WP_Term-Objekts ist die Verwendung der Methode WP_Term::get_instance() :

    // get the WP_Term object using menu id 3
    $menu_obj = WP_Term::get_instance( 3, 'nav_menu' );

Sie können das WP_Term-Objekt auch mit menu name | abrufen slug using get_term_by() function:

    // by menu slug
    $menu_obj = get_term_by( 'slug', 'my-menu', 'nav_menu' );

    // or, by menu name
    $menu_obj = get_term_by( 'name', 'My Menu', 'nav_menu' );

Nachdem Sie nun das Objekt WP_Term$menu_obj haben, können Sie dieses verwenden, um das Menü zu generieren:

    wp_nav_menu( array(
        'menu'           => $menu_obj
    ) );

Anwendungsfall:

Sie wissen also, wie Sie ein Menü mit WP_Term object als Argument für wp_nav_menu() function generieren. Jetzt lautet die Frage: Warum möchten Sie es verwenden? Abgesehen von der Tatsache, dass es sich nur um eine andere Option handelt , möchten Sie sie möglicherweise verwenden es, weil es eine etwas schnellere Option sein kann.

Wenn Sie beispielsweise dasselbe Menü zweimal verwenden möchten, einmal in der Kopfzeile und dann in der Fußzeile, anstatt menu id | zu verwenden slug | name , Sie können ein WP_Term Objekt in Ihrer Vorlage für das Header-Menü erstellen:

    global $menu_obj;
    $menu_obj = WP_Term::get_instance( 3, 'nav_menu' );

    wp_nav_menu( array(
        'menu'           => $menu_obj,
        'menu_id'        => 'header_menu'
    ) );

und dann einfach $menu_obj auch in der Fußzeilenvorlage verwenden:

    // global declaration is needed to access the global variable from another template
    global $menu_obj;
    wp_nav_menu( array(
        'menu'           => $menu_obj,
        'menu_id'        => 'footer_menu'
    ) );

Wenn Sie sich die Implementierung der Funktion wp_nav_menu() ansehen, werden Sie feststellen, dass Sie auf diese Weise einige zusätzliche Funktionsaufrufe im WordPress-Kern vermeiden und somit die Gesamtausführung etwas schneller sein wird.

Denken Sie jedoch daran, dass die Verwendung von theme_location Argumenten oder anderen Optionen für die Wartung möglicherweise bequemer und besser ist. Ob Sie es also verwenden sollten oder nicht, hängt von Ihrem speziellen Szenario ab. Ich habe nur erklärt, dass Sie & wie nichts mehr können.

2
Fayaz