Bucle de Páginas Hijas
Si alguien puede ayudar sería genial.
Encontré un fragmento de código que estoy usando y que básicamente hace lo que quiero, que es listar las subpáginas del padre, agregar una miniatura si hay una y añadir un extracto personalizado.
Sin embargo, el problema es que no puedo agregar un <?php post_class(); ?>
individual a un div dentro del bucle, está usando la clase del padre y repitiéndola para las subpáginas.
<?php
$child_pages = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent = ".$post->ID." AND post_type = 'page' ORDER BY menu_order", 'OBJECT'); ?>
<?php if ( $child_pages ) : foreach ( $child_pages as $pageChild ) : setup_postdata( $pageChild ); ?>
<?php
// Debe estar dentro de un bucle.
if ( has_post_thumbnail($pageChild->ID) ) {
get_the_post_thumbnail('page-thumb-mine');
}
// else {
// echo '<img src="' . get_bloginfo( 'stylesheet_directory' ) . '/images/icon-cropped.png" />';
// }
?>
<div <?php post_class(); ?>>
<?php echo get_the_post_thumbnail($pageChild->ID, 'page-thumb-mine'); ?>
<h3><a href="<?php echo get_permalink($pageChild->ID); ?>" rel="bookmark" title="<?php echo $pageChild->post_title; ?>"><?php echo $pageChild->post_title; ?></a></h3>
<?php echo excerpt(28); ?>
</div>
</div>
<?php endforeach; endif;
?>
¡Cualquier ayuda sería apreciada!
Gracias
Andy

Estoy bastante seguro de que el problema es que algunas etiquetas de plantilla dependen de la variable global $post
. Usar setup_postdata()
como lo estás haciendo ahora no modificará $post
. Si reemplazas todas las instancias de $pageChild
con $post
, todo debería funcionar.
Sin embargo, recomiendo encarecidamente usar la clase WP_Query y configurar los datos de tus publicaciones con 'the_post()' en su lugar. Aquí está el equivalente de tu código, pero con WP_Query:
<?php
$args = array(
'post_parent' => $post->ID,
'post_type' => 'page',
'orderby' => 'menu_order'
);
$child_query = new WP_Query( $args );
?>
<?php while ( $child_query->have_posts() ) : $child_query->the_post(); ?>
<div <?php post_class(); ?>>
<?php
if ( has_post_thumbnail() ) {
the_post_thumbnail('page-thumb-mine');
}
?>
<h3><a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<?php the_excerpt(); ?>
</div>
<?php endwhile; ?>
<?php
wp_reset_postdata();
Nota: Limpié algunas otras cosas en tu código publicado. También reemplacé tu función personalizada excerpt()
con the_excerpt()
para que el código de ejemplo funcione para cualquiera que quiera copiar/pegarlo.
Referencias:
https://codex.wordpress.org/Class_Reference/WP_Query
https://codex.wordpress.org/Function_Reference/setup_postdata

@BigBabel Eres una estrella, eso funciona de maravilla, perdón por el código desordenado, estaba probando todo tipo de cosas y no podía recordar el estado original. - Sí, tengo una función de extracto personalizado en mi archivo de funciones. - De todos modos, muchísimas gracias de nuevo, realmente aprecio el tiempo que tomaste para responder.

Esta línea de código parece romper este bucle: <?php echo excerpt(28); ?> La eliminé y el código de ejemplo funcionó perfectamente.

Quizás deberías eliminar esa línea de la respuesta ya que la mayoría de los usuarios llegan aquí a través de Google y solo buscan código que recorra las páginas hijas.

@RichardLindhout Esperaba que la nota que incluí sobre esa función sería suficiente para evitar que la gente tuviera problemas. Sin embargo, considerando la antigüedad de esta pregunta, definitivamente no estaría de más hacer que el código de ejemplo sea más genérico ahora. ¡Gracias!
