Loop per Pagine Figlie in WordPress: Aggiungere Classi Individuali
Se qualcuno può aiutarmi sarebbe fantastico.
Ho trovato uno snippet di codice che ho utilizzato e che fa praticamente quello che voglio: elenca le sottopagine del genitore, aggiunge una miniatura se presente e include un excerpt personalizzato.
Tuttavia, il problema è che non riesco ad aggiungere individualmente <?php post_class(); ?>
a un div all'interno del loop, sta usando la classe del genitore e la ripete per le sottopagine.
<?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
// Deve essere all'interno di un loop.
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;
?>
Qualsiasi aiuto sarebbe apprezzato!
Grazie
Andy

Sono abbastanza sicuro che il problema sia che alcuni tag del template si basano sulla variabile globale $post
. Usando setup_postdata()
come stai facendo ora, non modificherai $post
. Se sostituisci tutte le istanze di $pageChild
con $post
, tutto dovrebbe funzionare.
Tuttavia, consiglio vivamente di utilizzare la classe WP_Query e impostare i dati del post con 'the_post()' invece. Ecco l'equivalente del tuo codice, ma 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: Ho sistemato alcune altre cose nel codice che hai postato. Inoltre, ho sostituito la tua funzione personalizzata excerpt()
con the_excerpt()
così il codice di esempio funziona per chiunque voglia copiarlo/incollarlo.
Riferimenti:
https://codex.wordpress.org/Class_Reference/WP_Query
https://codex.wordpress.org/Function_Reference/setup_postdata

@BigBabel Sei un mito, funziona perfettamente, scusa per il codice disordinato, stavo provando di tutto e non riuscivo a ricordare lo stato originale. - Sì, ho una funzione di excerpt personalizzata nel mio file functions. - Comunque, grazie mille ancora, apprezzo davvero il tempo che hai dedicato per rispondere.

Questa riga di codice sembra interrompere il loop: <?php echo excerpt(28); ?> L'ho rimossa e il codice di esempio ha funzionato alla grande.

Forse sarebbe meglio rimuovere quella riga dalla risposta poiché la maggior parte degli utenti arriva qui tramite Google e cerca semplicemente del codice che crei un loop di pagine figlie.

@RichardLindhout Speravo che la nota che ho incluso riguardo a quella funzione fosse sufficiente per evitare che le persone avessero problemi. Tuttavia, considerando l'età di questa domanda, di sicuro non farebbe male rendere ora l'esempio di codice più generico. Grazie!
