Buclă pentru Pagini Copil în WordPress

29 mar. 2013, 13:20:57
Vizualizări: 19.6K
Voturi: 5

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

0
Toate răspunsurile la întrebare 1
4
12

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

29 mar. 2013 17:42:02
Comentarii

@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 Andy
29 mar. 2013 18:41:18

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

metaColin metaColin
22 feb. 2017 02:00:26

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 Richard Lindhout
23 dec. 2017 17:40:20

@RichardLindhout Speram că nota pe care am inclus-o despre acea funcție ar fi suficientă pentru a preveni problemele. Totuși, având în vedere vârsta acestei întrebări, cu siguranță nu ar strica să facem exemplul de cod mai generic acum. Mulțumesc!

BigBagel BigBagel
5 feb. 2018 01:56:29