Пункт меню Wordpress - PullRequest
       10

Пункт меню Wordpress

0 голосов
/ 11 мая 2010

У меня есть главная страница с дочерним элементом. Теперь мой вопрос: возможно ли иметь ссылку на главную страницу непосредственно на элемент дочерних элементов? Э.Г.

- главная страница (ссылки на страницу 2)

--- Страница 2

Вот мой код:

<div id="MainNav">
<ul>
<?php wp_list_pages('exclude=3&sort_column=menu_order&title_li=&depth=1'); ?>
</ul>
</div>
<div id="leftCol">
<?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 { ?>
<?php } ?>
</div>

Ответы [ 3 ]

1 голос
/ 11 мая 2010

На первый взгляд, похоже, ваш подход должен работать. Не могу сказать больше без дополнительной информации о вашей проблеме.

В качестве альтернативы я сделал похожую вещь в блоге, который я веду, но мне нужно было немного больше контролировать вывод. Так что я закончил свою собственную работу. Вот как я это сделал:

// Generate the subnav for a page
// Returns a list of links to child pages
// if there are no children, returns a blank list
function get_subnav($page_id)
{
     $current_page = get_page($page_id);
     if ($current_page->ancestors) {
       $child = get_page($page_id);
       $ancestor_id = $child->ancestors[0];
       $page = get_page($ancestor_id);
     } else {
       $page = get_page($page_id);
     }

     $children = get_children('post_parent=' . 
            $page->ID . '&post_type=page&post_status=publish&order=ASC&orderby=menu_order');

     if ($children) {
       $html = '';
       foreach ($children as $child) {
       $html .= "<li><a href='" . get_page_link($page->ID) . "'>" . get_post_meta($page->ID, 'nav_name', true) . "</a></li>\n";
       }
     } else {
       return false;
}


return $html;

}

Я называю это так: get_subnav($post->ID)

Обратите внимание, что он не будет лазать по всему дереву дочерних страниц. Если вы вызываете его с дочерней страницы, он создаст навигацию, используя своего первого предка в качестве корневого узла.

0 голосов
/ 12 мая 2010

Я делал это раньше, создав шаблон страницы, который автоматически перенаправляет на первый дочерний элемент. Возможно, вы могли бы использовать это. Добавьте в каталог шаблонов файл с именем tofirstchild.php и поместите его в него:

<?php

/*
Template Name: Redirect To First Child
*/

if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        $pagekids = get_pages( "post_parent=" . $post->ID . "&sort_column=menu_order" );
        $firstchild = $pagekids[0];
        wp_redirect( get_permalink( $firstchild->ID ) );
    }
}

?>

Затем в области администрирования выберите шаблон «Перенаправить на первого ребенка» для страницы «О нас».

0 голосов
/ 11 мая 2010

Я не понимаю.

Код, который вы предоставили, работает без ошибок (даже в режиме отладки). Вы спрашиваете, работает ли это? Если да, то да. Если это не работает для вас, пожалуйста, сообщите нам свои характеристики и где в вашей теме вы добавляете это.

Кроме того, вместо $post->post_parent вы, вероятно, должны использовать $wp_query->post->post_parent. Безопаснее, если кто-то использует пользовательские запросы и вызывает их в цикле $post.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...