WordPress 3.0의 새로운 메뉴 기능과 함께 wp_list_pages ()를 사용하여 하위 페이지를 표시하는 메뉴를 생성 하시겠습니까?


10

이전에는 다음과 같은 논리를 사용하여 현재 선택된 상위 페이지의 하위 페이지를 선택적으로로드 할 수있었습니다.

if(  $post->post_parent ) {
  $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
} else {
  $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
}

if ($children) { ?>
   <ul id="subnav">
     <?php echo $children; ?>
   </ul>
<?php 
} else {
}

새로운 register_nav_menus () / wp_nav_menu () 기능을 사용하여이를 수행하는 기본 방법은없는 것 같습니다. 이 시점에서 어떻게 이것을 함께 패치 할 수 있는지 아는 사람이 있습니까?

달성하려는 내용의 스크린 샷은 다음과 같습니다.

하위 메뉴 스크린 샷 드롭 다운


wp_nav_menu는 페이지 계층 구조와 관련이 없기 때문에 어렵습니다. 나는 이것에 대답 할 메뉴에 대해 충분히 모른다. 그러나 이것은 매우 흥미로운 질문이다.
John P Bloch

질문을 완전히 이해하지 못합니다. 무엇을 이루려고 노력하고 있습니까? 코드가 표시되지만 컨텍스트가 표시되지 않습니다. 원하는 사이트가 있습니까? 스크린 샷?
MikeSchinkel

새 탐색 메뉴 API에서 최상위 메뉴 항목의 하위 항목을 조건부로 (즉, 해당 트리 구조가 활성화 된 경우에만) 추가하려고합니다.
John P Bloch

@John P. Bloch- "트리 구조가 활성화 된 경우에만" 은 무엇을 의미합니까? 우리는 페이지 만 이야기하고 있습니까? 게시물, 카테고리, 태그, 맞춤 게시물 등은 어떻습니까? jQuery를 통해 또는 서버에서 클라이언트에서 수행 하시겠습니까? 나는 오히려 가정하지 않았고 실제 사용 사례에 대해 더 많이 듣고 싶습니다.
MikeSchinkel

@MikeSchinkel이 특별한 경우에, 나는 우리가 단지 페이지를 말하고 있다고 생각하지만, 그것은 중요하지 않습니다. 해결책은 여전히 ​​동일합니다. ZaMoose가 서버 측에서 수행하기를 원한다고 생각합니다.
John P Bloch

답변:


9

나는 나를 위해 일하는 Page Sub Navigation (내가 아는 영리한)이라는 위젯을 만들었습니다.

당신이 이것을 설치하면, 당신은 당신의 위젯 영역 중 하나에 위젯을 드래그 할 수 있습니다 BAM 이 작동합니다.

<?php
/*
Plugin Name: Page Sub Navigation
Plugin URI: http://codegavin.com/wordpress/sub-nav
Description: Displays a list of child pages for the current page
Author: Jesse Gavin
Version: 1
Author URI: http://codegavin.com
*/

function createPageSubMenu()
{
  if (is_page()) {
    global $wp_query;

    if( empty($wp_query->post->post_parent) ) {
      $parent = $wp_query->post->ID;
    } else {
      $parent = $wp_query->post->post_parent;
    }

    $title = get_the_title($parent);

    if(wp_list_pages("title_li=&child_of=$parent&echo=0" )) {
      echo "<div id='submenu'>";
      echo "<h3><span>$title</span></h3>";
      echo "<ul>";
      wp_list_pages("title_li=&child_of=$parent&echo=1" );
      echo "</ul>";
      echo "</div>";
    }
  }
}


function widget_pageSubNav($args) {
  extract($args);
  echo $before_widget;
  createPageSubMenu();
  echo $after_widget;
}

function pageSubMenu_init()
{
  wp_register_sidebar_widget("cg-sidebar-widget", __('Page Sub Navigation'), 'widget_pageSubNav');
}
add_action("plugins_loaded", "pageSubMenu_init");
?>

아니면 수분이 많은 부분을 원한다면 ...

if (is_page()) {
  global $wp_query;

  if( empty($wp_query->post->post_parent) ) {
    $parent = $wp_query->post->ID;
  } else {
    $parent = $wp_query->post->post_parent;
  }

  if(wp_list_pages("title_li=&child_of=$parent&echo=0" )) {
    wp_list_pages("title_li=&child_of=$parent&echo=1" );
  }
}

최신 정보

본질적으로 동일한 것을 수행하는 다른 플러그인을 찾았습니다 (아마도 더 잘합니다). http://wordpress.org/extend/plugins/subpages-widget/


이것은 너무 그렇기 때문에 내가 필요한 것에 가깝습니다. 유일한 문제는 BuddyPress가 활성화되었을 때 오작동한다는 것입니다.
ZaMoose

2

이 작업을 수행하기 위해 CSS 해킹을 수행 할 수 있습니다 (2 가지 방법)

1 이것은 CSS가 하위 탐색의 항목을 표시하게 만드는 가장 쉬운 방법입니다.

.current-menu-ancestor ul {display:inline;}
.current-menu-parent ul (display:inline;}

2 테마가 바디 클래스를 지원한다고 가정하면 각 "하위 탐색"에 대해 탐색 메뉴를 작성하고 기본 탐색 아래에 표시되도록 설정할 수 있습니다. 그런 다음 스타일 시트를 편집하여 다음과 같은 것을 사용하여 하위 탐색 div를 표시하십시오.

.child-menu-about, .child-menu-leadership {display:none;}
body.page-id-YOUR_ABOUT_PAGE_ID .child-menu-about {display:inline;}
body.category-YOUR-CATEGORY-SLUG  .child-menu-leadership {display:inline;}

0

여기에 이미지 설명을 입력하십시오 1 이것은 PHP 디스플레이입니다.

여기에 이미지 설명을 입력하십시오 2 이것은 CSS 디스플레이입니다.


코드 스크린 샷으로 답변을 게시하는 것이 가장 최악의 방법입니다. 답변을 다시 수정하십시오. 몇 마디의 설명도 아프지 않을 것입니다.
Picard

0
<nav class="site-nav children-link">
                <?php       

                    if(  $post->post_parent ) 
                    {
                      $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
                    } 
                    else 
                    {
                      $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
                    }

                    if ($children) { ?>
                       <ul>

                            <?php echo $children; ?>

                       </ul>

                    <?php 
                        } else {
                        }
                ?>
        </nav>

CSS

/*children-links links*/

.children-link 
{       

        background-color: #1a5957;
        color:#FFF;
        font-size: 100%;

}

.children-link li
{
    margin: 10px;   


}

.children-link ul li a:link,
.children-link ul li a:visited 
{
        padding: 15px 17px;
        text-decoration: none;
        border: 1px solid #1a5957;

}
.children-link ul li a:hover 
{
        background-color: #1a5957;
        color:#FFF;
        font-weight: bold;

}
.children-link .current_page_item a:link,
.children-link .current_page_item a:visited
{

    background-color: #1a5957;
    color: #FFF;
    cursor: default;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.