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


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.