Ici vous voyez le menu parent sélectionné dans la barre de navigation horizontale. J'ai déjà que ça marche. J'ai besoin d'une barre latérale identique à celle indiquée par le même parent et des enfants lorsqu'ils existent. Pour le moment, j'ai un bon code grâce à les commentaires de Michael sur WordPress Stack Exchange sur une question précédente . Mais ce code ne montre pas le parent au-dessus des pages enfants ni les pages enfants au-dessus des frères et sœurs. Toutes les idées, comment puis-je ajuster ce code créé par Michael:
<?php
$children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0&depth=2');
if ($children) { ?>
<ul id="three-menu">
<?php echo $children; ?>
</ul>
<?php } //ends (if($children)//
elseif($post->post_parent) { //if no children, try to get parent page and show siblings pages including the page itself
$siblings = wp_list_pages('title_li=&child_of='.$post->post_parent.'&echo=0&depth=1');
if ($siblings) { ?>
<ul id="three-menu">
<?php echo $siblings; ?>
</ul>
<?php } //ends if($siblings)// ?>
<?php } else { //optional: if no children and if no parent, then show all top level pages
$pagelist = wp_list_pages('title_li=&echo=0&depth=1');
if ($pagelist) { ?>
<ul id="three-menu">
<?php echo $pagelist; ?>
</ul>
<?php } //ends if($pagelist)// ?>
<?php } ?>
La page WordPress Codex http://codex.wordpress.org/Function_Reference/wp_list_pages#List_current_Page_with_its_ancestors_and_children semble intéressante, mais je ne l'ai pas encore tout compris. ..
Mise à jour:
J'ai ajouté les enfants à une profondeur de deux avec la première déclaration if
. Cela aide à charger les enfants et les frères et sœurs à un niveau de lien permanent tel que: http://domain.com/top-level-page/ . Je dois juste faire un peu de style et retravailler les niveaux suivants.
Solution CSS Update 2
Avec un peu d’aide, j’ai un menu qui fonctionne assez bien avec wep_list_pages
et quelques CSS. Ceci est fondamentalement une solution CSS.
<div id="home-menu">
<div class="wplp_menu">
<ul id="top-level-sidebar">
<?php wp_list_pages('title_li='); ?>
</ul>
</div>
</div>
et CSS:
li.current-page-ancestor a, li.current-menu-item a
{
color:#146BBB; //#0D55A8;
}
ul.children .current_page_item a:link,
ul.children .current_page_item a:visited {
background-color:#CCCCCC;
width: 250px;
}
.wplp_menu li{
list-style:none; /*blends out list dots,can be removed if done somewhere else*/
}
ul#top-level-sidebar {
background: #5097EA;
width: 300px;
margin: 0 10px 0 50px;
float: left;
}
.wplp_menu .page_item a {
display:none;
}
.wplp_menu .current_page_ancestor a,.wplp_menu .children .current_page_item a,.wplp_menu .current_page_item li a {
display:block;
}
.current_page_item a { /* CSS for active item*/
font-weight:bold;
}
.current_page_item li a {
font-weight:normal; /* Resets the above for its children */
}
Avec l'aide d'un développeur partenaire, j'ai opté pour une solution CSS. La solution a été ajoutée à la question ci-dessus. Il cache tout d'abord tous les éléments de page avec display:none
, puis affiche les éléments dont j'ai besoin. La liste des pages est chargée avec les indentations nécessaires à l'aide de wp_list_pages('title_li=');