Цикл дочерних страниц в WordPress - добавление классов к постам
Если кто-то может помочь, буду очень признателен.
Я нашел фрагмент кода, который делает почти то, что мне нужно - выводит список дочерних страниц родителя, добавляет миниатюру, если она есть, и пользовательское краткое описание.
Однако проблема в том, что я не могу добавить индивидуальные <?php post_class(); ?>
к div внутри цикла - он использует класс родителя и повторяет его для всех дочерних страниц.
<?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
// Должно быть внутри цикла
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;
?>
Любая помощь будет оценена!
Спасибо,
Энди

Я почти уверен, что проблема заключается в том, что некоторые теги шаблонов зависят от глобальной переменной $post
. Использование setup_postdata()
, как вы делаете сейчас, не изменяет $post
. Если вы замените все вхождения $pageChild
на $post
, всё должно заработать.
Однако я настоятельно рекомендую использовать класс WP_Query и настраивать данные записи с помощью 'the_post()'. Вот эквивалент вашего кода, но с использованием 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();
Примечание: я также немного подчистил ваш код. Кроме того, я заменил вашу пользовательскую функцию excerpt()
на the_excerpt()
, чтобы пример кода работал для всех, кто захочет скопировать/вставить его.
Ссылки:
https://codex.wordpress.org/Class_Reference/WP_Query
https://codex.wordpress.org/Function_Reference/setup_postdata

@BigBabel Ты просто звезда, это работает идеально, извини за грязный код — я перепробовал кучу вариантов и уже не помню исходное состояние. — Да, у меня есть пользовательская функция для вывода отрывков в файле functions. — В любом случае, ещё раз огромное спасибо, я очень ценю время, которое ты потратил на ответ.

Эта строка кода, кажется, ломает цикл: <?php echo excerpt(28); ?> Я удалил её, и пример заработал отлично.

Возможно, стоит убрать эту строку из ответа, так как большинство пользователей попадают сюда через Google и ищут просто код для вывода дочерних страниц.
