Помогите с навигацией по WordPress - PullRequest
1 голос
/ 05 августа 2011

В настоящее время я делаю следующее в моей теме WordPress,

    <?php

$pagelist = wp_list_pages( array( 
    'include' => '154, 136', 
    'title_li' => '', 
    'sort_column' => 'ID', 
    'sort_order' => 'DESC', 
    'depth' => '0',
    'echo' => false
));

if($post->post_type == "casestudy") {
    $args = array( 'post_type' => 'casestudy');
    $case_studies = new WP_Query( $args );
    $casestudylist = "";
    foreach ($case_studies->posts as $k => $v) {
        $active = ""; 
        if($v->post_status == "publish") {
            if($v->ID == $post->ID)
            {
                $active = "current_page";
            }
            $casestudylist .= "<li class='subnav ".$active."'><a href=".$v->guid.">". substr($v->post_title, 0, strpos($v->post_title, ':')) ."</a></li>";
        }
    }
}


$testimonials = wp_list_pages( array( 
    'include' => '318', 
    'title_li' => '', 
    'sort_column' => 'ID', 
    'sort_order' => 'DESC', 
    'depth' => '1',
    'echo' => false
));
//die(print_r($casestudylist));

$concatenatedlist = $pagelist . $casestudylist . $testimonials;

?>



<aside class="secondary">
    <nav>
        <ul>
            <?php echo $concatenatedlist; ?>
        </ul>
    </nav>
</aside>

Это создает навигацию и создает впечатление, что у страницы есть дочерние элементы, созданные с использованием пользовательских типов записей. Проблема в том, что если я смотрю на сообщение из $casestudylist, мне нужно каким-то образом добавить активный класс к первой ссылке, полученной из $pagelist, даже если они не связаны между собой. Я не против, если это решение JQuery. По сути, если элемент в моем casestudylist активен, мне нужно пометить ссылку на конкретный пример также как активную.

Вот HTML-код, который создает PHP.

    <aside class="secondary">
    <nav>
        <ul>
                <li class="page_item page-item-154">
                      <a href="/clients">Clients</a>
                    </li>
                    <li class="page_item page-item-136">
                        <a href="/case-study">Case Study</a
                    </li>
                    <li class="subnav current_page">
                        <a href="/?post_type=casestudy&amp;p=161">Brenntag</a>
                    </li>
                    <li class="subnav ">
                         <a href="/?post_type=casestudy&amp;p=104"></a>
                    </li>
                    <li class="subnav ">
                         <a href="?post_type=casestudy&amp;p=65"></a>
                    </li>
                    <li class="page_item page-item-318">
                        <a href="/testimonials">Testimonials</a>
                    </li>
        </ul>
    </nav>
</aside>

Ответы [ 2 ]

0 голосов
/ 05 августа 2011

Чтобы сделать это в jQuery, вы можете сказать:

if($('li.subnav.current_page').length>0) {
    $('li.page-item-136').addClass('current_page');
}

Но жесткое кодирование идентификатора поста не очень надежно, и при этом он не полагается на то, что jQuery применяет стиль, который должен обслуживать WP.

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

  • Заменить страницы отношениями родитель-ребенок длястраница и пользовательские сообщения
  • Создайте собственную таксономию, чтобы охватить все вовлеченные страницы, и измените свою тему, чтобы отобразить ее.
0 голосов
/ 05 августа 2011

Замечания:

  1. Ради чистоты $casestudylist следует установить на "" перед if.
  2. Нет никаких указаний на то, что вы попадете в раздел if($post->post_type == "casestudy").
  3. И если бы вы были, вы, вероятно, хотели бы обернуть $casestudylist в <ul>, чтобы вложить его.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...