web-dev-qa-db-fra.com

Comment faire écho à des extraits avec wp_list_pages?

J'ai essayé de reproduire des extraits dans wp_list_pages avec le code ci-dessous. Cela fonctionne, mais seulement pour l'une des pages enfants. Comment pourrais-je faire écho à l'extrait et au titre de chaque page enfant?

<?php
$children = wp_list_pages('title_li=&depth=1&child_of='.$post->ID.'&echo=0');
if ($children) { ?>
    <h2>
        <?php echo $children; ?>
        <?php the_excerpt(); ?> 
    </h2>
<?php } ?>
1
AndrettiMilas

Si vous souhaitez utiliser tous les filtres astucieux pour le titre et les extraits/contenu (et pourquoi ne voulez-vous pas cela?), Vous devez parcourir une requête personnalisée au lieu d'utiliser get_pages et le contenu brut des pages:

<?php
$args = array(
    'post_type' => 'page',
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'post_parent' => $post->ID,
);
$query = new WP_Query($args);
while ($query->have_posts()) {
    $query->the_post();
    ?>
    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    <?php
    the_excerpt();
}
wp_reset_postdata();
?>
2
tfrommen

wp_list_pages() est pour afficher une liste de pages. On dirait que vous voulez faire plus avec cela.

Au lieu de cela, vous devriez utiliser get_pages() avec renvoie un tableau de données sur les pages, ce qui signifie que vous disposez de beaucoup plus de souplesse. Voici un exemple de code:

$children = get_pages(array('child_of' => $post->ID));

foreach ($children as $child) { ?>
   <h2><?php echo $child->post_title; ?></h2>
   <p><?php echo $child->post_excerpt; ?></p>
   <li><a href="<?php echo get_permalink($child->ID); ?>"><?php echo $child->post_title; ?></a></li>
<?php } ?>
2
Steven Jones

Vous ne pouvez pas faire cela comme vous le tentez. Tout le balisage est généré par wp_list_pages(). Vous ne pouvez pas "insérer" un contenu comme ça.

Vous pouvez appliquer un rappel au hook wp_list_pages , mais vous aurez besoin de regex délicats pour le faire.

Je pense que votre meilleure option est de passer un Walker personnalisé à wp_list_pages(). Quelque chose comme ça:

class My_Page_Walker extends Walker_Page {
  function end_el( &$output, $page, $depth = 0, $args = array() ) {
    $output .= apply_filters('the_excerpt',$page->post_excerpt);  
    // or generate the excerpt from post_content
    // $output .= apply_filters('the_content',wp_trim_words($page->post_content));
    $output .= '</li>';
  }
}

$args = array(
  'post_status'=> 'publish',
  'walker' => new My_Page_Walker
);

wp_list_pages( $args ); 
0
s_ha_dum