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>
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.