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