Antworten:
Dies ist durch Filtern möglich. Dies ist wp_nav_menu_objects
der einfachste Ort, um zu überprüfen, welches Element das aktuelle Menüelement ist, da WordPress die Klassen bereits für Sie hinzugefügt hat .
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
foreach ( $sorted_menu_items as $menu_item ) {
if ( $menu_item->current ) {
$GLOBALS['wpse16243_title'] = $menu_item->title;
break;
}
}
return $sorted_menu_items;
}
Sie können jetzt diese neue globale Variable anstelle des normalen Titels verwenden. Einfaches Beispiel:
add_filter( 'single_cat_title', 'wpse16243_single_cat_title' );
function wpse16243_single_cat_title( $cat_title )
{
if ( isset( $GLOBALS['wpse16243_title'] ) ) {
return $GLOBALS['wpse16243_title'];
}
return $cat_title;
}
Dies funktioniert natürlich nur, wenn Sie das Menü anzeigen, bevor Sie den Titel anzeigen. Wenn Sie es früher benötigen (möglicherweise im <title>
Element?), Sollten Sie zuerst das Menü rendern und später anzeigen .
wpse16243_wp_nav_menu_objects
die aktuelle Menü-ID abzurufen. Aber es ist nicht konsequent. Das Umschalten zwischen der Startseite und einem Menüpunkt gibt mir nicht immer den richtigen Menüpunkt - es ist eine Art "Verzögerung". Irgendwelche Vorschläge, wie ich die aktuelle Menü-ID abrufen kann?
wpse16243
? Ich sehe diese seltsame Art von Namen ziemlich häufig und frage mich, worum es geht. Haftungsausschluss: Wordpress noob.
WordPress Stack Exchange question number 16243
. Wenn Benutzer diesen Code direkt kopieren, tritt kein Konflikt mit anderen Plugins auf, die möglicherweise dieselben Funktionsnamen verwenden.
Sie können verwenden wp_get_nav_menu_items()
. Hier ist ein Beispiel function
:
<?php
function my_get_menu_item_name( $loc ) {
global $post;
$locs = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locs[$loc] );
if($menu) {
$items = wp_get_nav_menu_items($menu->term_id);
foreach ($items as $k => $v) {
// Check if this menu item links to the current page
if ($items[$k]->object_id == $post->ID) {
$name = $items[$k]->title;
break;
}
}
}
return $name;
}
Rufen Sie dann das function
mit dem Standortnamen des Navigationsmenüs auf, das Sie verwenden möchten:
<?php
$menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // eg. 'primary'
echo $menu_name;
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
foreach ( $sorted_menu_items as $menu_item ) {
if ($menu_item->current ) {
$GLOBALS['currentMenuTitle'] = $menu_item->title;
$GLOBALS['currentMenuID'] = $menu_item->ID;
break;
}
}
return $sorted_menu_items;
}
function get_menu_items_children( $menu_item_id='' )
{
global $wpdb;
// AND meta_key='_menu_item_menu_item_parent'
$myrows = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta JOIN $wpdb->posts ON $wpdb->postmeta.post_id=$wpdb->posts.id WHERE meta_value = '".$menu_item_id."' AND meta_key='_menu_item_menu_item_parent' ORDER BY $wpdb->posts.menu_order ASC" );
foreach ( $myrows as $menu_item ) {
$sc = get_object_vars($menu_item);
$myrowsb = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE post_id = '".$sc['post_id']."' AND meta_key='_menu_item_object_id' " );
foreach ( $myrowsb as $menu_itemb ) {
$scb = get_object_vars($menu_itemb);
$pmIDs[] = $scb['meta_value'];
}
}
return $pmIDs;
}
Ich bin mir nicht sicher, ob ich genau folge.
Die "Museen, die wir unterstützen" werden durch einen Beitragstitel, einen Seitentitel, einen Kategorietitel usw. generiert (oder, wenn Sie ein benutzerdefiniertes Navigationsmenü verwenden, kann es sich um einen benutzerdefinierten Titel handeln).
Was versuchst du mit diesem Text zu machen? Wo versuchst du es anzuzeigen? Ich nehme an, Sie versuchen, es auf der Kategorie-Indexseite anzuzeigen (da Sie angeben, dass dies der Fall ist current-menu-item
). Wenn ja, rufen Sie einfach an, <?php single_cat_title(); ?>
um den Kategorietitel auszugeben.
Wenn Sie zusätzliche Kategoriedaten benötigen, können Sie Folgendes verwenden:
$cat = get_the_category();
$currentcat = $cat[0];
Was die folgenden Variablen zur Verfügung stellt:
$currentcat=>cat_ID // Category ID
$currentcat=>cat_name // Category Name (Same as Title)
$currentcat=>category_nicename // Category Slug
$currentcat=>category_description // Category Description
$currentcat=>category_count // Category Count (# of Posts w/ this Category)
Wenn Sie sich an einem anderen Ort als der Kategorieindexseite befinden, müssen Sie die $ catid an diese Funktionen übergeben.
BEARBEITEN:
Da Sie darauf hingewiesen , dass „Museen We Support“ ist ein benutzerdefiniertes Menü - Titel, die am einfachsten wäre Annäherung an die Kategorie umbenennen von „Museen“ auf „Museen We Support“ (Anmerkung: Sie können die Schnecke verlassen können, museums
unverändert). Dies würde jedoch bedeuten, dass "Museen, die wir unterstützen" als Kategorietitel angezeigt wird, wo immer es in Ihrer Vorlage ausgegeben wird. Wenn das akzeptabel ist, dann keine Sorge.
Andernfalls müssen Sie so etwas wie wp_get_nav_menu_items()
( Codex ref ) verwenden, um den Titel für den jeweiligen Menüpunkt abzurufen.
wp_get_nav_menu_items()
.