Odpowiedzi:
Jest to możliwe dzięki filtrowaniu wp_nav_menu_objects
, które jest najłatwiejszym miejscem do sprawdzenia, który element jest bieżącym elementem menu, ponieważ WordPress już dla ciebie dodał klasy .
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;
}
Możesz teraz używać tej nowej zmiennej globalnej zamiast normalnego tytułu. Prosty przykład:
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;
}
Oczywiście działa to tylko wtedy, gdy wyświetlasz menu przed wyświetleniem tytułu. Jeśli potrzebujesz go wcześniej (może w <title>
elemencie?), Powinieneś najpierw wyrenderować menu, a następnie wyświetlić je później .
wpse16243_wp_nav_menu_objects
do pobrania bieżącego identyfikatora menu. Ale to nie jest konsekwentne. Przełączanie między stroną główną a pozycją menu nie zawsze daje mi prawidłową pozycję menu - to rodzaj „opóźnień”. Wszelkie sugestie dotyczące tego, jak mogę pobrać bieżący identyfikator menu?
wpse16243
? Widzę ten dziwny typ nazwy dość powszechny i zastanawiam się, o co w tym wszystkim chodzi. Uwaga: Wordpress noob.
WordPress Stack Exchange question number 16243
. Jeśli ludzie bezpośrednio skopiują ten kod, nie będzie konfliktował z innymi wtyczkami, które mogą mieć takie same nazwy funkcji.
Możesz użyć wp_get_nav_menu_items()
. Oto próbka 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;
}
Następnie wywołujemy function
z nazwy lokalizacji w menu nawigacyjnym chcesz używać:
<?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;
}
Nie jestem pewien, czy dokładnie podążam.
„Obsługiwane przez nas muzea” jest generowane przez tytuł postu, tytuł strony, tytuł kategorii itp. (Lub, jeśli korzystasz z niestandardowego menu nawigacji, może to być niestandardowy tytuł).
Co próbujesz zrobić z tym tekstem? Gdzie próbujesz to wyświetlić? Zakładam, że próbujesz wyświetlić go na stronie indeksu kategorii (skoro to zaznaczasz current-menu-item
)? Jeśli tak, wystarczy zadzwonić, <?php single_cat_title(); ?>
aby wyświetlić tytuł kategorii.
Jeśli potrzebujesz dodatkowych informacji o kategorii, możesz użyć czegoś takiego:
$cat = get_the_category();
$currentcat = $cat[0];
Który udostępnia następujące zmienne:
$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)
Jeśli jesteś gdzieś inny niż kategoria Indeks Page, musisz zdać $ CatID do tych funkcji.
EDYTOWAĆ:
Ponieważ zaznaczyłeś, że „Muzea, które obsługujemy” to niestandardowy tytuł menu, najłatwiejszym sposobem byłoby zmienić nazwę kategorii z „Muzea” na „Muzea, które obsługujemy” (uwaga: możesz pozostawić ślimak museums
bez zmian). Oznaczałoby to jednak, że „Obsługiwane przez nas muzea” będzie wyświetlane jako tytuł kategorii, gdziekolwiek indziej może zostać wyświetlony w szablonie. Jeśli jest to do zaakceptowania, nie martw się.
W przeciwnym razie będziesz musiał użyć czegoś takiego jak wp_get_nav_menu_items()
( Kodeks odniesienia ), aby zdobyć tytuł dla konkretnego elementu menu.
wp_get_nav_menu_items()
.