현재 메뉴 항목 제목을 변수로 얻는 방법?


10

현재 메뉴 항목을 PHP 변수로 가져올 수 있습니까?

메뉴 항목 '우리가 지원하는 박물관'을 통해 카테고리 박물관을 나열하고 있으므로 '우리가 지원하는 박물관'을 가져 와서 어딘가에 표시하고 싶습니까?

어떤 도움을 주셔서 감사합니다!

답변:


15

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>요소에 있을까요?) 먼저 메뉴를 렌더링 한 다음 나중에 표시해야합니다 .


Jan Jan-$ menu_item-> 현재 항목의 자식 배열을 만드는 방법이 있는지 궁금하십니까? 몇 가지를 시도했지만 멀리 가지 못했습니다 ..!
v3nt

필터의 도움으로 이것을 관리했습니다-아래 답변하십시오. 건배!
v3nt

Jan Fabry / wpse16243_wp_nav_menu_objects현재 메뉴 ID를 검색 하는 데 사용하려고했습니다 . 그러나 그것은 일관성이 없습니다. 홈페이지와 메뉴 항목을 전환해도 항상 올바른 메뉴 항목이 표시되지 않습니다. 현재 메뉴 ID를 검색하는 방법에 대한 제안이 있습니까?
Steven

함수 이름 앞에 머리말을 붙인 이유가 wpse16243있습니까? 나는이 이상한 유형의 이름이 상당히 일반적이며 그것이 무엇인지 궁금합니다. 면책 조항 : Wordpress noob.
Stephen Watkins

2
@Steve : 고유 한 접두사 : WordPress Stack Exchange question number 16243. 사람들이이 코드를 직접 복사하면 동일한 기능 이름을 공유 할 수있는 다른 플러그인과 충돌하지 않습니다.
Jan Fabry

4

사용할 수 있습니다 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;

2
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;
}

0

내가 정확히 따르는 지 모르겠습니다.

"우리가 지원하는 박물관"은 게시물 제목, 페이지 제목, 범주 제목 등으로 생성됩니다 (또는 사용자 정의 탐색 메뉴를 사용하는 경우 사용자 정의 제목 일 수 있음).

이 텍스트로 무엇을하려고합니까? 어디에 표시하려고합니까? 카테고리 색인 페이지에 표시하려고한다고 가정합니다 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 ) 와 같은 것을 사용해야 합니다.


이봐 칩-이 페이지; bfami.modernactivity.co.uk/category/museum 기본적으로 고양이는 '박물관'이지만 메뉴 페이지에 설정된 탐색 레이블 (맞춤 제목) 인 '박물관 지원'을 표시하고 싶습니다. 어떻게 든 그것을 잡을 수 있다고 생각하십니까?
v3nt

도움이됩니다. 내 답변 편집을 참조하십시오. 범주의 이름을 바꾸거나을 사용하는 두 가지 옵션이 있습니다 wp_get_nav_menu_items().
칩 베넷

건배 칩-결국 카테고리 제목을 변경했습니다! 메뉴 레이블을 잡는 쉬운 방법이있을 것이라고 생각했습니다.
v3nt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.