"wp_nav_menu_items"후크를 사용하여 특정 메뉴 만 사용자 정의?


36

여기에 대한 도움 덕분에 내 테마의 기능에 이것을 추가하여 기본 메뉴에 사용자 정의 검색 상자를 추가했습니다.

add_filter('wp_nav_menu_items','search_box_function');
  function search_box_function ($nav){
  return $nav."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Search'></form></li>";
}

그러나 바닥 글에 넣을 다른 메뉴를 추가했지만 검색 상자 도이 메뉴에 추가됩니다. 기본 메뉴에만 검색 창을 추가하려면 어떻게합니까?

메뉴를 등록하는 코드는 다음과 같습니다.

register_nav_menus( array(
  'primary' => __( 'Primary Navigation', 'twentyten' ),
  'secondary'=>__('Secondary Menu', 'twentyten' ),

 ) );

보조 메뉴를 표시하는 코드는 다음과 같습니다.

wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'secondary' ) ); 

답변:


41

사용자 정의 검색 상자를 기본 메뉴에만 추가하기 위해 wp_nav_menu_items 필터에서 제공하는 두 번째 매개 변수를 전달하고 theme_location이 기본 위치인지 확인할 수 있습니다

add_filter('wp_nav_menu_items','search_box_function', 10, 2);
function search_box_function( $nav, $args ) {
    if( $args->theme_location == 'primary' )
        return $nav."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Search'></form></li>";

    return $nav;
}

3
고마워, 그것은 대단하다 ... 그냥 초보자 질문- 10, 2코드에서 무엇을합니까?
cannyboy

4
10우선 순위 (10은 기본값)이고, 2필터에 걸고있는 함수가 받아들이는 인수의 개수입니다.
Rarst

@ ampt, 예, 시도했습니다. 효과가있었습니다. 거의. 로그인하면 두 번째 메뉴 링크가 사라집니다. 어떻게 해결할 수 있습니까?

1
WP 3.8에서 변수는 $ args-> theme_location 대신 $ args-> menu입니다.
Alain Jacomet Forte

@AlainJacometForte 실제로 $ args-> menu는 메뉴의 숫자 ID를 반환하고 $ args-> theme_location은 문자열을 반환 하므로이 답변은 여전히 ​​정확합니다. 문자열을 비교하는 경우 아무것도 변경되지 않았습니다.
Marcus

8

이를 수행하는 다른 방법은 메뉴 슬러그를 wp_nav_menu_items 필터에 추가하는 것입니다.

예를 들어, 머리글이라는 메뉴가 있고이 메뉴 (테마 위치에 연결되어 있는지 여부에 관계없이)가 항상 검색 상자를 표시하려고한다고 가정합니다. 이 경우 메뉴 슬러그 header를 필터 에 추가하면 됩니다.

새로운 필터는 다음과 같습니다.

add_filter ( 'wp_nav_menu_header_items' , 'search_box_function' );   

통지 header새로운 필터 부. 기능을 추가 할 메뉴를 WordPress에 알려줍니다.

이것은 현재 문제에 접근하는 다른 방법 일뿐입니다.


이 페이지의 @oshi 항목을 참조하십시오.
halfer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.