답변:
WordPress에서 이미 클래스를 추가wp_nav_menu_objects
했기 때문에 현재 메뉴 항목이 어떤 항목인지 확인하는 가장 쉬운 위치 인 필터링 을 통해 가능 합니다 .
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;
}
이제 일반 제목 대신이 새로운 전역 변수를 사용할 수 있습니다. 간단한 예 :
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;
}
물론 타이틀을 표시하기 전에 메뉴를 표시 한 경우에만 작동합니다. 더 일찍 필요한 경우 ( <title>
요소에 있을까요?) 먼저 메뉴를 렌더링 한 다음 나중에 표시해야합니다 .
wpse16243_wp_nav_menu_objects
현재 메뉴 ID를 검색 하는 데 사용하려고했습니다 . 그러나 그것은 일관성이 없습니다. 홈페이지와 메뉴 항목을 전환해도 항상 올바른 메뉴 항목이 표시되지 않습니다. 현재 메뉴 ID를 검색하는 방법에 대한 제안이 있습니까?
wpse16243
있습니까? 나는이 이상한 유형의 이름이 상당히 일반적이며 그것이 무엇인지 궁금합니다. 면책 조항 : Wordpress noob.
WordPress Stack Exchange question number 16243
. 사람들이이 코드를 직접 복사하면 동일한 기능 이름을 공유 할 수있는 다른 플러그인과 충돌하지 않습니다.
사용할 수 있습니다 wp_get_nav_menu_items()
. 샘플은 다음과 같습니다 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;
}
그런 다음 사용하려는 탐색 메뉴function
의 위치 이름 으로를 호출하십시오 .
<?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;
}
내가 정확히 따르는 지 모르겠습니다.
"우리가 지원하는 박물관"은 게시물 제목, 페이지 제목, 범주 제목 등으로 생성됩니다 (또는 사용자 정의 탐색 메뉴를 사용하는 경우 사용자 정의 제목 일 수 있음).
이 텍스트로 무엇을하려고합니까? 어디에 표시하려고합니까? 카테고리 색인 페이지에 표시하려고한다고 가정합니다 current-menu-item
. 그렇다면 간단하게 전화 <?php single_cat_title(); ?>
하여 카테고리 제목을 출력하십시오.
추가 카테고리 정보가 필요한 경우 다음과 같은 것을 사용할 수 있습니다.
$cat = get_the_category();
$currentcat = $cat[0];
다음 변수를 사용할 수 있습니다.
$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)
Category Index Page 가 아닌 다른 곳이라면 $ catid를이 함수에 전달해야합니다.
편집하다:
"우리가 지원하는 박물관"이 사용자 정의 메뉴 제목임을 표시 했으므로 가장 쉬운 방법은 범주의 이름 을 "박물관"에서 "지원하는 박물관"으로 변경하는 것입니다 (참고 : 슬러그 museums
를 변경하지 않은 채로 둘 수 있음 ). 그러나 그렇게하면 템플릿에서 출력 될 수있는 "제목있는 박물관"이 범주 제목으로 표시됩니다. 그것이 수용 가능하다면 걱정할 필요가 없습니다.
그렇지 않으면 특정 메뉴 항목의 제목을 가져 오기 위해 wp_get_nav_menu_items()
( Codex ref ) 와 같은 것을 사용해야 합니다.
wp_get_nav_menu_items()
.