programing

메뉴 트리의 일부를 표시하는 방법?

anycallme 2023. 10. 28. 08:12

메뉴 트리의 일부를 표시하는 방법?

워드프레스 3.0을 처리하려고 합니다.오히려 멋진 일이지만 한 가지 문제는 해결할 수가 없습니다.예를 들면, 나는 그런 메뉴 트리를 가지고 있습니다.메뉴 트리는 페이지를 기반으로 구성됩니다.

Home
   news
   video
   audio
Blog
   About author
   Favourite colors
      red
      blue
      green
My car
   wheels
   tires

아이디어: 메인 메뉴는 홈, 블로그, 내 차와 같은 루트 요소로 구성되어 있습니다. 왼쪽에 현재 활성 루트 요소의 어린이 요소를 표시하려고 합니다.

예를 들어, 사용자가 "홈" 페이지에 있는 경우 왼쪽 부분에 다음이 표시됩니다.

  news
  video
  audio

사용자가 "블로그" 페이지에 있는 경우 다음을 확인할 수 있습니다.

About author
       Favourite colors
          red
          blue
          green

그렇게 할 수 있는 API를 찾을 수가 없습니다.어디서 찾을 수 있는지 추천해 주시겠습니까?

업데이트: @Jason McCreary wp_list_pages()를 보고 시도해 보았습니다.어떻게 사용할 수 있는지 모르겠습니다. 페이지는 템플릿을 참조하십시오.

    <?php
/*
 Template Name: page_news

 * @package WordPress
 * @subpackage Twenty_Ten
 * @since Twenty Ten 1.0
 */

get_header(); ?>
<h1>page_news</h1>
<h1>Children menu:</h1>
<?php wp_list_pages('echo=0&child_of=8&title_li='); ?>
<div id="container">
        <div id="content" role="main">

        <?php
        /** Get category id by name*/
        //$catId = get_category_by_slug('news')->term_id;
        query_posts('category_name=news');
        get_template_part( 'loop', 'page' );
        ?>

        </div><!-- #content -->
</div><!-- #container -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

다음 코드 라인 참조:

<?php wp_list_pages('echo=0&child_of=8&title_li='); ?>

id=8의 페이지가 있습니다. (URL에 표시됩니다.)ID=8인 페이지에 여러 자녀가 있습니다.인쇄를 하고 싶은데 인쇄가 안 되어 있네요.wp_list_pages() 함수의 출력은 아무것도 아닙니다.왜 그런지.. :(

이를 위해 filter_hook을 작성할 수 있습니다.

내 메소드: 추가 만들기start_in의론wp_nav_menu사용자 지정 후크 사용:

# in functions.php add hook & hook function
add_filter("wp_nav_menu_objects",'my_wp_nav_menu_objects_start_in',10,2);

# filter_hook function to react on start_in argument
function my_wp_nav_menu_objects_start_in( $sorted_menu_items, $args ) {
    if(isset($args->start_in)) {
        $menu_item_parents = array();
        foreach( $sorted_menu_items as $key => $item ) {
            // init menu_item_parents
            if( $item->object_id == (int)$args->start_in ) $menu_item_parents[] = $item->ID;

            if( in_array($item->menu_item_parent, $menu_item_parents) ) {
                // part of sub-tree: keep!
                $menu_item_parents[] = $item->ID;
            } else {
                // not part of sub-tree: away with it!
                unset($sorted_menu_items[$key]);
            }
        }
        return $sorted_menu_items;
    } else {
        return $sorted_menu_items;
    }
}

다음으로, 템플릿에서 당신은 그냥 전화를 걸 수 있습니다.wp_nav_menu가외로start_in자식을 끌 페이지의 ID를 포함하는 인수:

wp_nav_menu( array( 
    'theme_location' => '<name of your menu>',
    'start_in' => $ID_of_page,
    'container' => false,
    'items_wrap' => '%3$s'
) );

나는 당신이 있을지도 모르는 페이지의 하위 탐색을 인쇄하기 위해 이 글을 썼습니다.각 페이지에 대한 하위 탐색을 인쇄하려면 ID를 가져오는 대신 페이지 상위를 가져옵니다.그것보다 더 많은 것이 관련되겠지만, 그것은 시작입니다.

$menu = wp_get_nav_menu_items( 'Primary Menu' );
$post_ID = get_the_ID();
echo "<ul id='sub-nav'>";
foreach ($menu as $item) {
    if ($post_ID == $item->object_id) { $menu_parent = $item->ID; }
    if (isset($menu_parent) && $item->menu_item_parent == $menu_parent) {
         echo "<li><a href='" . $item->url . "'>". $item->title . "</a></li>";
     }
 }
echo "</ul>";`

wp_list_pages()를 확인합니다.사이드바에서 어린이 탐색 기능을 제공하는 데 유용합니다.

macjoost의 답변은 훌륭하지만, 상위 항목을 인쇄하려면 상위 항목을 해제하지 않아야 하므로 18번 라인을 조정해야 합니다.

    if($item->object_id != (int)$args->start_in) { unset($sorted_menu_items[$key]); }

wp_list_pages를 보셨습니까?

http://codex.wordpress.org/Function_Reference/wp_list_pages

속성의 자식을 더 자세히 보다.

Breadcrum navxt 플러그인을 사용할 수 있습니다.그것은 당신이 원하는 것을 정확히 해주고 정말 훌륭합니다.빵가루 NavXT 퍼긴

서버 측에서 worpress 사이트 분류법의 사용자 지정 부분을 출력하는 방법을 탐구하기 위해 멈췄습니다.저는 단지 jquery를 사용하여 메인 메뉴에서 활성 분류 브랜치를 복사하여 필요한 페이지 컨테이너에 붙여넣기만 합니다.

언급URL : https://stackoverflow.com/questions/5770884/how-to-display-part-of-a-menu-tree