如何在循环中的帖子之间输出定制代码?

时间:2020-07-16 作者:Confused One

我试图在过去的帖子之前和未来的帖子之后加上一个标题。

我正在使用get_posts() 在函数中,使用foreach 按日期(元键)排序的自定义帖子类型的循环。如果帖子的关联日期小于当前日期(即,日期不是将来的日期),我想输出一些HTML。if ($custom_post_date >= $today && $index === 1)我遇到的问题是,HTML在过去的第一篇帖子之后得到输出。如何在满足条件的第一篇帖子之前输出HTML?有没有回去的路foreach 循环或类似的东西?

<?php
    $index = 1; // counts all items in query
    $count = count($upcoming_posts);
    $today = new DateTime();
    $past  = false;

foreach ($upcoming_posts as $posts) {
    if ($post_date >= $today && $index === 1) : ?>
        <h2><?php __( \'Upcoming Posts\', \'sage\' ); ?></h2>
        <div class="wp-block-columns has-2-columns">
    <?php else ($post_date < $today && $past === false && $index === 1) : ?>
        <?php $wp_query->current_post -= 1; ?>
        <h2><?php __( \'Past Posts\', \'sage\' ); ?></h2>
        <div class="wp-block-columns">
    <?php endif; ?>
    <div class="wp-block-column">
        <div class="wp-block-media-text alignwide">
    ...
        </div>
    </div>
    <php if ( ($index % 2) == 0 && $end === false ) : ?>
    </div>
    <div class="wp-block-columns has-2-columns"> <!-- ends row every other iteration -->
        <?php $end = false;
        endif;
        if ($count == $index ) : ?>
    </div> <!-- ends final row -->
    <?php endif;
} ?>

1 个回复
最合适的回答,由SO网友:Antti Koskinen 整理而成

您可能已经解决了这个问题,但这里有两个例子可以说明如何做到这一点。在我的两个示例中,我首先进行排序,然后进行渲染。在我看来,这让事情变得越来越清晰。

Example 1

循环查询的帖子并将其排序为两个助手数组。如果这些数组有贴子,请循环它们并渲染贴子。

$posts        = helper_function_to_query_posts();
$future_posts = array();
$past_posts   = array();
$today        = strtotime(\'today\');

foreach ($posts as $post) {
    if ( $post->post_date >= $today ) {
        $future_posts[] = $post;
    } else {
        $past_posts[] = $post;
    }
}

if ( $future_posts ) {
    esc_html_e( \'Upcoming Posts\', \'sage\' );
    helper_function_to_handle_looping_and_rendering_of_posts( $future_posts );
}
if ( $past_posts ) {
    esc_html_e( \'Past Posts\', \'sage\' );
    helper_function_to_handle_looping_and_rendering_of_posts( $past_posts );
}

Example 2

循环查询的帖子并将帖子html推送到助手变量中。之后回显这些变量。

$posts              = helper_function_to_query_posts();
$future_posts_html  = \'\';
$past_posts_html    = \'\';
$post_html_template = \'<div class="my-post">
    <h2>%s</h2>
    %s
</div>\';
$today              = strtotime(\'today\');

foreach ($posts as $post) {
    if ( $post->post_date >= $today ) {
        $future_posts_html .= sprintf(
            $post_html_template,
            esc_html($post->post_title),
            esc_html($post->post_excerpt),
        );
    } else {
        $past_posts[] = .= sprintf(
            $post_html_template,
            esc_html($post->post_title),
            esc_html($post->post_excerpt),
        );
    }
}

if ( $future_posts_html ) {
    esc_html_e( \'Upcoming Posts\', \'sage\' );
    echo $future_posts_html;
}
if ( $past_posts_html ) {
    esc_html_e( \'Past Posts\', \'sage\' );
    echo $past_posts_html;
}