Объедините полный пост с 4 выдержками из двух разных типов постов. - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь сделать последнее сообщение полным. Этот пост может быть из двух разных типов постов: «пост» и «учебник». Я также хочу отобразить четыре отрывка, два из типа поста 'post' и два из типа поста 'tutorial'. Я не хочу, чтобы весь пост был продублирован в отрывке.

Я попытался использовать один WP_Query, и это почти привело меня к правильной точке. Я также пытался использовать несколько WP_Query, но это не так повезло.

$args  = array(
    'post_type' => array( 'post', 'tutorial' ),
    'post_per_page' => 5
);
$query = new WP_Query( $args );

if ( $query->have_posts() ) :
    $count = 0;
    while ( $query->have_posts() ) : $query->the_post();
        if ( $count == 0 ) { ?>

            <h2><?php the_title(); ?></h2>
            <?php the_content();

            $count ++;

        } else { ?>
            <h2><?php the_title(); ?></h2>
            <?php the_excerpt();
        }
    endwhile;

endif;
wp_reset_postdata();
?>

Так что этот код очень близко подходит ко мне. Но выдержка не делает то, что я хочу. Я хочу, чтобы он показал две выдержки из «пост» и две выдержки из «учебник». Теперь он показывает одну выдержку из «учебника» и три выдержки из «поста».

1 Ответ

2 голосов
/ 09 мая 2019

Задача немного сложнее установить ее в одном запросе. Я написал код для вас с комментариями для каждого шага. Пожалуйста, проверьте это.

// first get last published post
$last_post = get_posts(
    array(
        'post_type' => array( 'post', 'tutorial' ),
        'numberposts' => 1
    )
);

// get two posts excluding $last_post which might be a post
$last_two_posts = get_posts(
    array(
        'post_type' => array( 'post' ),
        'numberposts' => 2,
        'exclude' => array($last_post[0]->ID)
    )
);

// get two tutorial excluding $last_post which might be a tutorial
$last_two_tutorials = get_posts(
    array(
        'post_type' => array( 'tutorial' ),
        'numberposts' => 2,
        'exclude' => array($last_post[0]->ID)
    )
);

$posts = array_merge($last_post, $last_two_posts, $last_two_tutorials);

foreach( $posts as $post ) {
    setup_postdata($post);
    // print content only for first post and excerpt for others
    if ($post->ID == $last_post[0]->ID) {
        the_content();
    } else { 
        if($post->post_type == 'post') {
            echo '<div class="post-excerpt">' . get_the_excerpt() . '</div>';
        } else {
            echo '<div class="tutorial-excerpt">' . get_the_excerpt() . '</div>'; 
        }
    }
}

wp_reset_postdata();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...