Je travaille avec un thème basé sur la genèse et j'aimerais construire une structure de menu page/page enfant. Cette partie que je peux faire à l'aide d'un code produit par Bill Erickson.
Ce que j'essaie essentiellement de faire est de créer un menu au-dessus du contenu des pages avec des pages enfants. Ensuite, dans la barre latérale gauche, accédez à la navigation pour les pages avec des enfants. J'ai quelque chose d'installation ici: sandbox.digisavvy.com
Voici le code sur lequel je travaille.
<?php
/**
* Section Menu
* Displays the subpages of the current section
*
* @author Bill Erickson
* @link http://www.billerickson.net/custom-secondary-menu
*/
function be_section_menu() {
// Only run on pages
if( !is_page() )
return;
// If top level page, use current ID; else use highest ancestor
global $post;
$section_id = empty( $post->ancestors ) ? $post->ID : end( $post->ancestors );
// Get all the menu locations
$locations = get_nav_menu_locations();
// Find out which menu is in the 'primary' location
$menu = wp_get_nav_menu_object( $locations[ 'primary' ] );
// Grab all menu items in this menu that have a parent of the current section.
// This grabs the subpages, assuming the current section is a top level page
$menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'post_parent' => $section_id ) );
// If there are menu items, build the menu
if( !empty( $menu_items ) ) {
echo '<ul class="section-submenu">';
$first = true;
foreach( $menu_items as $menu_item ) {
$classes = 'page-item';
// This adds a class to the first item so I can style it differently
if( $first )
$classes .= ' first-menu-item';
$first = false;
// This marks the current menu item
if( get_the_ID() == $menu_item->object_id )
$classes .= ' current_page_item';
echo '<li class="' . $classes . '"><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
}
echo '</ul>';
}
}
add_action( 'genesis_before_loop', 'be_section_menu' );
La partie suivante que je voudrais accomplir consiste à créer un système de menus avec Page enfant/Enfant de la page enfant. C'est la partie où je suis coincé. Ce code ci-dessous est suggéré comme un changement, mais ne fait pas tout à fait l'affaire. Il ajoute simplement les enfants des enfants à la navigation.
global $post;
$level = count( $post->ancestors );
// Only build tertiary menu if current page is at least third level
if( 1 > $level )
return;
$section_id = $post->ancestors[$level - 2];
Eh bien, j'ai bien peur de ne jamais avoir élaboré le code correspondant. Ce que j'ai trouvé est une paire de plugins qui accomplissent ce que je cherche à faire. Répertoriez les sous-pages du même niveau que la page sous-page/enfant/petit-enfant en cours, puis pourrez empêcher certaines pages de s'afficher.
Pourrait regarder dans la combinaison de ceux-ci.
Je viens d'écrire ceci: https://Gist.github.com/vwasteels/874f7d08726076bdc580
Il va chercher récursivement et générer un tableau avec des enfants incorporés dans chaque élément. Cela fonctionnera avec un menu de n'importe quelle profondeur.