web-dev-qa-db-fra.com

Menu de la page enfant dans la barre latérale

Je ne veux pas utiliser le menu déroulant pour les pages sous/enfant sur mon site Wordpress, je veux que les pages soient répertoriées dans la barre latérale de la page parent.

C’est le code que j’ai eu jusqu’à présent (ci-dessous), mais il n’affiche rien dans la barre latérale, je vous serais reconnaissant de votre aide!

Ceci est dans mon functions.php:

function wpb_list_child_pages() { 

    global $post; 

    if ( is_page() && $post->post_parent )
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
    else
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
    if ( $childpages ) {
        $string = '<ul>' . $childpages . '</ul>';
    }
    return $string;
}

add_shortcode('wpb_childpages', 'wpb_list_child_pages');

et ceci est l'appel dans le page.php (également essayé sidebar.php):

<?php wpb_list_child_pages(); ?>

Des idées sur ce qui ne va pas?!

Sur une autre note, je pensais que la page parent devrait être listée dans la navigation afin de pouvoir y revenir facilement (même si cela se trouve dans le navigateur principal). Est-il possible de faire du premier élément de la liste la page parente?

Et encore une autre remarque, la seule façon de désactiver/masquer la liste déroulante sans CSS était de créer un menu personnalisé dans Apparence> Menu et de désactiver les enfants. Y a-t-il un autre moyen plus efficace?

Merci d'avance!

MODIFIER

Je pensais juste que j'ajouterais une mise à jour pour montrer le balisage que j'essaye de générer. J'ai réalisé que je devais y insérer le titre/la page parent! Voici l'exemple de balisage:

<nav class="page-nav">
    <h3>Navigation Title</h3>
    <ul>
        <li><a href="#">Parent page</a></li>
        <li><a href="#">Child page #1</a></li>
        <li><a href="#">Child page #2</a></li>
        <li><a href="#">Child page #3</a></li>
    </ul>
</nav>
2
user1406440

Lorsque vous essayez de générer le contenu d'une fonction, vous devez indiquer si vous souhaitez transférer les données à une autre fonction (ou à quelque chose que vous souhaitez alimenter), ou si vous souhaitez l'imprimer directement dans le navigateur.

Si vous utilisez return, votre fonction renverra les données afin que vous puissiez les utiliser dans une fonction secondaire comme ci-dessous:

second_function(first_function($input));

Si vous souhaitez simplement imprimer le contenu sur le navigateur, utilisez echo ou print_r au lieu de return. Il est recommandé d'utiliser echo dans votre cas. Cependant, n'utilisez pas echo lors de la création de fonctions shortcode. Le texte sortira comme vous ne le souhaitez pas.

Revenons à notre problème WordPress, allons-nous?

Pour la structure fournie, utilisez la fonction suivante:

function wpb_list_child_pages() { 

    global $post; 

    if ( is_page() && $post->post_parent )
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
    else
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
    if ( $childpages ) {
        $string = '
        <nav class="page-nav">
            <h3>Navigation Title</h3>
               <ul>
                   <li><a href="'.get_permalink($post->post_parent).'">'.get_the_title($post->post_parent).'</a></li>'
                   .$childpages.
               '</ul>
        </nav>';
    }
    return $string;
}

add_shortcode('wpb_childpages', 'wpb_list_child_pages');

Maintenant, utilisez cette fonction pour sortir votre menu où vous le souhaitez:

<?php echo wpb_list_child_pages(); ?>

ou faites le shortcode:

echo do_shortcode( ' [wpb_childpages] ' );

ou même utiliser le shortcode dans un widget texte:

[wpb_childpages]

Tous produisent le même résultat.

2
Jack Johansson