메뉴 항목의 "설명"에 액세스하려면 어떻게합니까?
-
-
페이지 발췌문을 사용하지 않는 이유는 무엇입니까?Why don’t you use the page excerpt?
- 0
- 2013-01-06
- fuxia
-
wp_nav_menu가 호출 될 때 메뉴에서도 사용해야하기 때문입니다.맞춤형 보행기가 있습니다.because I need to use it in the menu as well, when wp_nav_menu is called. I have a custom walker.
- 0
- 2013-01-06
- Claire
-
@toscho 이제 발췌 부분을 사용해야합니다.[이 질문] (http://wordpress.stackexchange.com/questions/78723/how-to-get-the-excerpt-in-nav-menu-walker) 좀 봐주 시겠어요?@toscho As it turns out I need to use the excerpt this now. Could you take a look at [this question](http://wordpress.stackexchange.com/questions/78723/how-to-get-the-excerpt-in-nav-menu-walker) please?
- 0
- 2013-01-08
- Claire
-
2 대답
- 투표
-
- 2013-01-06
메뉴 항목을 다시 구문 분석하는 것이 마음에 들지 않습니다. 대체 솔루션으로 첫 번째 실행 중에 설명을 저장하는 것이 좋습니다.
add_filter( 'walker_nav_menu_start_el', 'wpse_78483_get_current_items_description', 10, 2 ); /** * Get nav items description. * * @wp-hook walker_nav_menu_start_el * @param string $item_output * @param object $item * @return string */ function wpse_78483_get_current_items_description( $item_output = NULL, $item = NULL ) { static $desc = ''; // The function is NOT called during nav menu rendering, but later. if ( 'walker_nav_menu_start_el' !== current_filter() ) return $desc; // The function is called during wp_nav_menu(). // description is set if ( ! empty ( $item->description ) // and an URL is available and ! empty ( $item->url ) // and it is the current page and parse_url( $item->url, PHP_URL_PATH ) === $_SERVER['REQUEST_URI'] ) { // copy the description into our static internal variable $desc = $item->description; // remove this filter, it is not needed anymore remove_filter( 'walker_nav_menu_start_el', __FUNCTION__ ); } // return unchanged item markup return $item_output; }
설명
이 함수는 다음 두 가지 작업을 수행합니다.
-
wp_nav_menu()
내부에서 호출되는 필터 역할을합니다. 여기에서는 현재 페이지에 도달 할 때까지 호출됩니다. 그런 다음 설명은 내부적으로$desc
에 저장됩니다. - 설명에 대한getter 역할을합니다. 탐색 메뉴가 렌더링 된 이후 매개 변수없이이 함수를 호출하면 설명이있는 경우 해당 값을 얻습니다.
단점은 바닥 글과 같이 너무 늦게 메뉴를 호출 할 때는 작동하지 않는다는 것입니다.
장점 : 시간이 절약됩니다.나중에 매개 변수없이 함수를 호출하여 언제든지 설명을 얻을 수 있습니다.
print wpse_78483_get_current_items_description();
다음은 두 번째 사용 방법입니다.
$desc = wpse_78483_get_current_items_description(); if ( empty ( $desc ) ) { the_excerpt(); } else { print wpautop( $desc ); }
추가 팁 : 페이지에 대한 발췌 편집기 상자를 활성화 할 수 있습니다.
add_action( 'wp_loaded', 'wpse_78483_page_excerpt' ); function wpse_78483_page_excerpt() { add_post_type_support( 'page', 'excerpt' ); }
I don’t like the idea to parse the menu items again. As an alternative solution I suggest to store the description during the first run:
add_filter( 'walker_nav_menu_start_el', 'wpse_78483_get_current_items_description', 10, 2 ); /** * Get nav items description. * * @wp-hook walker_nav_menu_start_el * @param string $item_output * @param object $item * @return string */ function wpse_78483_get_current_items_description( $item_output = NULL, $item = NULL ) { static $desc = ''; // The function is NOT called during nav menu rendering, but later. if ( 'walker_nav_menu_start_el' !== current_filter() ) return $desc; // The function is called during wp_nav_menu(). // description is set if ( ! empty ( $item->description ) // and an URL is available and ! empty ( $item->url ) // and it is the current page and parse_url( $item->url, PHP_URL_PATH ) === $_SERVER['REQUEST_URI'] ) { // copy the description into our static internal variable $desc = $item->description; // remove this filter, it is not needed anymore remove_filter( 'walker_nav_menu_start_el', __FUNCTION__ ); } // return unchanged item markup return $item_output; }
Explanation
The function does two things:
- It acts as a filter called inside of
wp_nav_menu()
. Here, it is called until it hits the current page. Then the description is stored internally in$desc
. - It acts as a getter for the description: If you call this function without parameter after the navigation menu has been rendered you get the value of the description, if there is one.
The downside is: it would not work for a menu call too late, in a footer for example.
The advantage: you save time.You can get the description later any time by calling the function without a parameter:
print wpse_78483_get_current_items_description();
As a follow-up, here is a second way to use it:
$desc = wpse_78483_get_current_items_description(); if ( empty ( $desc ) ) { the_excerpt(); } else { print wpautop( $desc ); }
Extra tip: You can enable the excerpt editor box for pages:
add_action( 'wp_loaded', 'wpse_78483_page_excerpt' ); function wpse_78483_page_excerpt() { add_post_type_support( 'page', 'excerpt' ); }
-
감사합니다.나는 그것이 어떻게 작동하는지 정말로 이해하지 못하지만 그렇게 해 주셔서 감사합니다!thank you. I don't really understand how it works but it does so thanks!
- 0
- 2013-01-06
- Claire
-
@Nicola 죄송합니다.더 나은 설명과 인라인 문서로 업데이트했습니다.@Nicola Sorry, you are right. I have made an update with a better explanation and inline docs.
- 1
- 2013-01-06
- fuxia
-
감사합니다. 모든 페이지에서 발췌 부분에 대체 텍스트를 저장하도록 질문을 업데이트했습니다.thanks, I updated my question to show that I want all pages to store the alt text in excerpt
- 0
- 2013-01-08
- Claire
-
- 2013-01-06
Google 캐시 웹 사이트에서 답을 찾았습니다.
현재 페이지의 탐색 항목 설명에 액세스하려면
함수를 호출하면됩니다.echo wps_get_menu_description()
function wps_get_menu_description( ) { global $post; // Default $defaults = array( 'echo' => false, 'format' => '', 'description' => '', 'location' => 'primary', 'classes' => 'post-description' ); $args = wp_parse_args( $args, $defaults ); extract( $args , EXTR_SKIP ); // Get menu $menu_locations = get_nav_menu_locations(); $nav_items = wp_get_nav_menu_items( $menu_locations[ $location ] ); // Cycle through nav items foreach ( $nav_items as $nav_item ) { if ( ( is_page() || is_single() || is_archive() ) && ( $nav_item->object_id == $post->ID ) ) { $description = $nav_item->description; } } $output = $description; return $output; }
Found the answer on a google cached website.
So to access the current page's navigation item description - just call the function
echo wps_get_menu_description()
function wps_get_menu_description( ) { global $post; // Default $defaults = array( 'echo' => false, 'format' => '', 'description' => '', 'location' => 'primary', 'classes' => 'post-description' ); $args = wp_parse_args( $args, $defaults ); extract( $args , EXTR_SKIP ); // Get menu $menu_locations = get_nav_menu_locations(); $nav_items = wp_get_nav_menu_items( $menu_locations[ $location ] ); // Cycle through nav items foreach ( $nav_items as $nav_item ) { if ( ( is_page() || is_single() || is_archive() ) && ( $nav_item->object_id == $post->ID ) ) { $description = $nav_item->description; } } $output = $description; return $output; }
언더 모양> 메뉴에서 메뉴를 추가 할 수있는 곳에 설명이 있습니다. 내 페이지에서 그 설명을 에코 할 수 있기를 바랍니다. 메뉴가 아니라 내 페이지입니다. 이 정보에 어떻게 액세스 할 수 있습니까?
수정 :
@toscho
맞춤형 보행기는 어떻게 수정합니까? $item 개체가 발췌 페이지에 액세스 할 수 있습니까?