2010-02-23 2 views
9

J'essaie de créer une liste de pages frères (pas de messages) dans WordPress pour remplir la barre latérale d'une page. Le code que j'ai écrit avec succès renvoie le titre du parent d'une page.Comment puis-je récupérer une liste des pages frères d'une page Wordpress?

<?php 
$parent_title = get_the_title($post->post_parent); 
echo $parent_title; ?> 

Si je comprends bien, vous avez besoin id d'une page (plutôt que le titre) pour récupérer les frères et sœurs d'une page (via wp_list_pages). Comment puis-je obtenir l'identifiant du parent de la page?

D'autres approches sont les bienvenues. L'objectif est de répertorier les frères et sœurs d'une page, pas nécessairement de récupérer simplement l'identifiant du parent.

Répondre

23

$post->post_parent vous donne l'ID parent, $post->ID vous donnera l'ID de la page en cours. Donc, ce qui suit la liste des frères et sœurs d'une page:

wp_list_pages(array(
    'child_of' => $post->post_parent, 
    'exclude' => $post->ID 
)) 
4
<?php if($post->post_parent): ?> 
<?php $children = wp_list_pages('title_li=&child_of='.$post->post_parent.'&echo=0'); ?> 
<?php else: ?> 
<?php $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0'); ?> 
<?php endif; ?> 
<?php if ($children) { ?> 
<ul class="subpage-list"> 
<?php echo $children; ?> 
</ul> 
<?php } ?> 

Ne pas utiliser le paramètre exclure, cible juste que .current_page_item à se différencier.

+0

La meilleure solution pour ce problème de l'OMI – benpalmer

14
wp_list_pages(array(
    'child_of' => $post->post_parent, 
    'exclude' => $post->ID, 
    'depth' => 1 
)); 

La bonne réponse, car les deux autres réponses n'affichent pas exclusivement les frères et soeurs.

2

Certaines des réponses sur cette page ont des informations légèrement dépassées. A savoir, exclude ne semble plus être nécessaire lors de l'utilisation de child_of.

Voici ma solution:

// if this is a child page of another page, 
// get the parent so we can show only the siblings 
if ($post->post_parent) $parent = $post->post_parent; 
// otherwise use the current post ID, which will show child pages instead 
else $parent = $post->ID; 

// wp_list_pages only outputs <li> elements, don't for get to add a <ul> 
echo '<ul class="page-button-nav">'; 

wp_list_pages(array(
    'child_of'=>$parent, 
    'sort_column'=>'menu_order', // sort by menu order to enable custom sorting 
    'title_li'=> '', // get rid of the annoying top level "Pages" title element 
)); 

echo '</ul>'; 
Questions connexes