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?
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 object
WP_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.
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
) );
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.