Buclă pentru Pagini Copil în WordPress
Dacă cineva mă poate ajuta, ar fi minunat.
Am găsit un fragment de cod pe care l-am folosit și care face aproape ceea ce vreau eu, și anume să listeze subpaginile părinte, să adauge o miniatură dacă există și să includă un excerpt personalizat.
Totuși, problema este că nu pot adăuga <?php post_class(); ?>
individual unui div în interiorul buclei, deoarece folosește clasa de la părinte și o repetă pentru subpagini.
<?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
// Trebuie să fie în interiorul unei 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;
?>
Orice ajutor ar fi apreciat!
Mulțumesc,
Andy

Sunt destul de sigur că problema este că unele tag-uri de șablon se bazează pe variabila globală $post
. Folosirea funcției setup_postdata()
așa cum o faci acum, nu va modifica variabila $post
. Dacă înlocuiești toate instanțele lui $pageChild
cu $post
, totul ar trebui să funcționeze.
Totuși, aș recomanda cu tărie utilizarea clasei WP_Query și configurarea datelor postului cu 'the_post()'. Iată echivalentul codului tău, dar folosind 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();
Notă: Am curățat câteva lucruri în codul tău original. De asemenea, am înlocuit funcția ta personalizată excerpt()
cu the_excerpt()
astfel încât codul exemplu să funcționeze pentru oricine dorește să-l copieze/lipească.
Referințe:
https://codex.wordpress.org/Class_Reference/WP_Query
https://codex.wordpress.org/Function_Reference/setup_postdata

@BigBabel Ești un star, funcționează minunat, îmi cer scuze pentru codul haotic, încercam tot felul de lucruri și nu-mi aminteam starea originală. - Da, am o funcție personalizată pentru excerpt în fișierul meu functions. - Oricum, îți mulțumesc din nou enorm, apreciez foarte mult timpul pe care l-ai acordat pentru a răspunde.

Această linie de cod pare să întrerupă această buclă: <?php echo excerpt(28); ?> Am eliminat-o și codul exemplu a funcționat perfect.

Poate ar fi bine să elimini acea linie din răspuns, deoarece majoritatea utilizatorilor ajung aici prin Google și caută doar cod care să parcurgă paginile copil.
