У меня есть CPT - "бюллетени" и таксономия "группы бюллетеней"
Я пытаюсь отобразить каждое сообщение под заголовком соответствующего термина со всеми сообщениями с терминами, отображаемыми под ним, с указанием месяца и года, когда они были опубликованы (по дате публикации).
Я думал, что у меня что-то работает, но во время тестирования заметил, что если сообщение имеет тот же «Месяц», он сотрет год и месяц для других сообщений в том же термине, а также для условий ниже него, у меня есть несколько изображений для показа что я имею в виду и код, который я использую до сих пор.
На показанных изображениях я добавил дату публикации к имени файла для ясности, обычно это будет просто имя файла.
Не работает, если месяц даты публикации совпадает
Работает, если месяц даты публикации отличается
Как я могу это решить? мне нужно получить все даты сообщений с отдельным запросом и сохранить это?
Любые примеры приветствуются
/*
* Custom Template: Archive Newsletters
*/
// Remove stuff
remove_action( 'genesis_loop', 'genesis_do_loop' );
// Add our custom loop
add_action( 'genesis_loop', 'newsletter_archive_loop' );
function newsletter_archive_loop() {
//fetch the terms for the newsletter-groups taxonomy
$terms = get_terms( 'newsletter-groups', array (
'hide_empty' => 'true',
'exclude' => 67, //excluding parent term ID 'school-newsletters' - only want to show term children of 'school-newsletters'
));
// run a query for each term
foreach( $terms as $term ) {
// Define the query
$args = array(
'post_type' => 'newsletters',
'newsletter-groups' => $term->slug ,
'posts_per_page' => -1,
);
// run the query
$query = new WP_Query( $args );
if( $query->have_posts() ) {
echo '<div class="letters">';
// output the term name in a heading tag
echo'<h4 class="term-heading">' . $term->name . '</h4>';
while ( $query->have_posts() ) { $query->the_post();
// get current month
$current_month = get_the_date('F');
// get attachements from custom field
$attachment_id = get_field('newsletter_upload');
$url = wp_get_attachment_url( $attachment_id );
$title = get_the_title( $attachment_id );
// get the filesize
$filesize = filesize( get_attached_file( $attachment_id ) );
$filesize = size_format($filesize, 2);
if( $query->current_post === 0 ) {
echo '<h4 class="date">';
the_date( 'F Y' );
echo '</h4>';
} else {
$f = $query->current_post - 1;
$old_date = mysql2date( 'F', $query->posts[$f]->post_date );
if($current_month != $old_date) {
echo '<h4 class="date">';
the_date( 'F Y' );;
echo '</h4>';
}
} ?>
<li class="letters-file">
<a href="<?php echo $url; ?>" title="<?php echo $title; ?>" target="_blank" rel="noopener noreferrer"><?php the_title(); ?></a><span class="letters-file-sz"> (<?php echo $filesize; ?>)</span>
</li>
<?php } // endwhile have posts
echo '</div>'; // close letters div
// use reset postdata to restore orginal query
wp_reset_postdata();
} // end if query have posts
} // end for each
} // end function
genesis(); // call genesis framework
Удалите оба условия if и else и попробуйте напечатать только echo ''; the_date('F Y'); эхо ''
будут отображаться только даты отдельных сообщений, но не сгруппированные
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ
if( $query->current_post === 0 )
и$f = $query->current_post - 1;
наif( $query->current_post -1
и$f = $query->current_post === 0;
, все будет работать отлично! - person andytc   schedule 11.03.2021if( $query->current_post -1 ) {
, если я изменю это на 2, это сработает, но я предполагаю, что тогда он покажет только 3 сгруппированных, поэтому 4 сообщения не будут работать и т. д. и т. д. - person andytc   schedule 11.03.2021