Необычный вывод меню

Здравствуйте, уважаемые гуру WordPress

Подскажите пожалуйста, в чем может быть проблема в коде.

На сайте http://www.seointellect.ru есть меню навигации, состоящее из страниц, на сером фоне.
При нажатии на пункт меню (например Поисковая оптимизация) появляется подменю на белом фоне.

Есть две проблемы:
1. Как сделать, чтобы, когда человек заходит по одному из подменю, это подменю не пряталось, а выводилось. (сейчас, при входе на страницу (например, Оптимизация сайта), подменю прячется)
2. В родительской страницы "О компании" (ID 26) есть подстраница Адрес (ID 164). Но она не выводится, а выводится подстраница "Юзабили аудит" (ID 121) из "Повышение конверсии"

Код навигации предоставляю ниже

<!-- begin categories -->

        <ul class="categories">
        
            <?php wp_list_pages('depth=1&title_li='); ?>
            
        </ul>
        <!-- end categories -->
        
        
        
        <ul class="categories2">
        
<?php
/*switch ($page_id){ 
    case 24:
    wp_list_pages('depth=2&title_li=&include=57,62,74,76,80,83,86,92,96,100,103,37,119,39,41,44,121');
    break;

       case 26:
    wp_list_pages('depth=2&title_li=&include=37,119,39,41,44');
    break;

    case 28:
    wp_list_pages('depth=2&title_li=&include=121');
    break;

    case 39:
    wp_list_pages('depth=2&title_li=&include=57,62,74,76,80,83,86,92,96,100,103');
    break;

    default :
    echo '';
}*/

if (is_page('24') ) {
    wp_list_pages('depth=2&title_li=&include=57,62,74,76,80,83,86,92,96,100,103,37,119,39,41,44,121');
} elseif (is_page('26') ) {
    wp_list_pages('depth=2&title_li=&include=37,119,39,41,44');
} elseif ( is_page('28') ) {
    wp_list_pages('depth=2&title_li=&include=121');
} elseif ( is_page('39') ) {
    wp_list_pages('depth=2&title_li=&include=57,62,74,76,80,83,86,92,96,100,103');
} else {
$cat = '';
}
?>

            <?php ////wp_list_pages('depth=2&title_li=&include=37,39,'); /* &exclude=24,28,35,30,33 |||| &child_of=39 */ ?>
            
        </ul>
    
        

    <div style="clear: both;"></div>

Надеюсь на вашу подсказку

Неужели нет никакого решения?

Почему бы вам не сделать проверку, если подкатегории отсутствуют, то выводить родительскую.

Я так думаю, можно прописать условие на каждую страницу, но получится очень громоздкой код. Хочется, чтобы условие действовало автоматом на все страницы (кстати, хотя меню расположение в диве "кАТЕГОрии", оно состоит исключительно из страниц).

Еще один момент. Забыл написать. В function.php прописан код, отвечающий за это меню

# Displays a list of pages
function dp_list_pages() {
    global $wpdb;
    $querystr = "SELECT $wpdb->posts.ID, $wpdb->posts.post_title FROM $wpdb->posts WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'page' ORDER BY $wpdb->posts.post_title ASC";
    $pageposts = $wpdb->get_results($querystr, OBJECT);
    if ($pageposts) {
        foreach ($pageposts as $post) {
            ?><li><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a></li><?php 
        }
    }
}

Сейчас повнимательней посмотрел на страничку, мне кое-что непонятно.
Во-первых, судя по задаче которую предстоит выполнить вы пытаетесь изобрести велосипед заново.
Во-вторых, почему бы при написании страницы не выбрать у неё родительскую категорию, сразу же отпадёт надобность в параметрах вызова писать &include=57,62….
В-третьих, то что вам необходимо реализовать вызывается кодом практически в одну строчку. Я уже на форуме писал о том, как выводить список ссылок подкатегории родительской категории, этот код немного нужно модифицировать под вашу тему и только.
Посмотрите во тут – http://forum.maxsite.org/viewtopic.php?pid=52255#p52255.

axeleus, спасибо за код, который вы дали. Действительно, код стал намного легче, и не надо вручную прописыва айди каждой страницы.
Эту тему настраивал другой человек до меня. Мне сразу не очень понравился этот код. СпасибО, что подсказали более простой вариант

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

То, что вам необходимо:

<div id="pagemenu">
    <?php
        if($post->post_parent)
        $children = wp_list_pages("title_li=&sort_column=menu_order&child_of=".$post->post_parent."&echo=0");
        else
        $children = wp_list_pages("title_li=&sort_column=menu_order&child_of=".$post->ID."&echo=0");
        if ($children) { ?>
            <ul class="pagemenu">
            <?php echo $children; ?>
            </ul>
    <?php } ?>
</div>

P.S. Смотрите примеры в кодексе :).

Всё же решение которое в кодексе немного не то. Для корректного отображения вам скорее подойдёт изменённая версия того кода, что я писал ранее:

<div id="pagemenu">
    <?php
    $children = wp_list_pages("depth=1&sort_column=menu_order&title_li=&child_of=".$post->ID."&echo=0");
    if ($children) { ?>
        <ul class="pagemenu">
            <?php echo $children; ?>
        </ul>
    <?php } 
    else{
        $children = wp_list_pages("depth=1&title_li=&sort_column=menu_order&child_of=".$post->post_parent."&echo=0"); ?>
        <ul class="pagemenu">
            <?php echo $children; ?>
        </ul>
    <?php } ?>
</div>

Да, мы на верном пути. 🙂 Теперь подстраницы остаются наверху, когда мы находимся на одной из них. Только есть один баг. На главной и если в родительских страницах нет подстраниц, в полосе подстраниц выводится список родительских страниц.

Вот код страниц и подстраниц.

<ul class="categories">
        
        <?php wp_list_pages('depth=1&title_li=0&include=24,26,28,35,30,33'); ?>    
            
        </ul>
        <!-- end categories -->
        
        
        
        <ul class="categories2">

       <?php
   $children =   wp_list_pages("depth=1&sort_column=menu_order&title_li=&child_of=".$post->ID."&echo=0");
    if ($children) { ?>
<ul class="categories2">
            <?php echo $children; ?>
        </ul>         
  
    <?php } 
    else{
      $children =  wp_list_pages("depth=1&title_li=&sort_column=menu_order&child_of=".$post->post_parent."&echo=0"); ?>
        <ul class="categories2">
            <?php echo $children; ?>
        </ul>
    <?php } ?>

см. http://www.seointellect.ru/

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

А разве не это нужно было сделать?

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

Я этого и добивался, т.к. у вас нет хлебных крошек на сайте, для того чтобы в рубриках где нет дочерних рубрик не отображалось горизонтальное меню нужно использовать код как в статье http://forum.maxsite.org/viewtopic.php?pid=52255#p52255 и всё.

А если сделать просто всплывающее меню?

Лучше от горизонтального меню оставить только родительские категории, а в сайдбаре вставить древовидное меню на jquery, либо оставить всё как есть, только вывод подкатегорий сделать не в строчку а в столбик, но это моё мнение, в любом случае делать вам 🙂

Спасибо большое за вашу помощь и советы. Это действительно очень помогает мне.

🙂

Кстати, хотел еще спросить. jquery использует джава скрипт. А как джава скрипт индексируется поисковиками?

В смысле? Jquery – это библиотека для способов представления информации в необходимом виде. Flash в многих поисковиках не индексируется, хотя уже попытки делаются, но не путайте flash и jquery.

Cпасибо

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

<?php } 
    else{
        $children = wp_list_pages("depth=1&title_li=&sort_column=menu_order&child_of=".$post->post_parent."&echo=0"); ?>
        <ul class="pagemenu">
            <?php echo $children; ?>
        </ul>
    <?php } ?>

исключил родительские страницы, и все заработало.

Anonymous
Отправить
Ответ на: