Поочередно запрашивайте несколько типов записей Wordpress - PullRequest
1 голос
/ 04 апреля 2020

Я написал WP Query, чтобы показать сообщения из нескольких типов сообщений в одном списке.

Это работает правильно, но не в правильном порядке. Я хочу загружать сообщения поочередно. См. Ниже:

function carousel_acties_arrangementen() {
    ob_start();
    $currentID = get_the_ID();
    $args = array(
        'post_type' => array('actie', 'arrangement'),
        'posts_per_page' => '6',
        'order' => 'ASC',
        'orderby' => 'meta_value',
        'post__not_in' => array($currentID),
    );


    $acties_arrangementen = new WP_Query($args);
?>

    <?php if ($acties_arrangementen->have_posts()) : ?>
        <?php 

            list($actiePost,$arrangementPost) = array_chunk($acties_arrangementen->get_posts(),3);
        ?>
        <div dir="rtl" class="carousel_cards acties_arrangementen">
        <?php foreach($actiePost as $key=>$value){?>

            <?php $afbeelding = wp_get_attachment_image_src( get_post_thumbnail_id( $value->ID ), "large" ); ?>
            <?php $post_type = get_post_type( $value->ID ); ?>
            <?php $post_title = get_the_title( $value->ID ); ?>
            <?php $post_link = get_the_permalink( $value->ID ); ?>

                <div style="background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.0), rgba(53, 123, 183, 0.9)), url(<?php echo $afbeelding[0]; ?>);background-repeat:no-repeat;background-size:cover;">
                    <a class="link" src="<?php echo $post_link; ?>">
                        <div dir="ltr" class="content_slide">
                            <p class="post_type"><?php echo $post_type; ?></p>
                            <h3><?php echo $post_title; ?></h3>
                            <div class="knop_link">
                                <span class="bekijken">Bekijken<span class="underline"></span></span><span class="icoon"></span>
                            </div>
                        </div>
                    </a>
                </div>

            <?php if(isset($arrangementPost[$key])){?>

                <div style="background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.0), rgba(234, 107, 53, 0.9)), url(<?php echo $afbeelding[0]; ?>);background-repeat:no-repeat;background-size:cover;">
                    <a class="link" src="<?php echo $post_link; ?>">
                        <div dir="ltr" class="content_slide">
                            <p class="post_type"><?php echo $post_type; ?></p>
                            <h3><?php echo $post_title; ?></h3>
                            <div class="knop_link">
                                <span class="bekijken">Bekijken<span class="underline"></span></span><span class="icoon"></span>
                            </div>
                        </div>
                    </a>
                </div>

            <?php } ?>

        <?php } ?>
        </div>
    <?php endif; ?>
<?php
return ob_get_clean();
}
add_shortcode('acties_arrangementen', 'carousel_acties_arrangementen');

Но теперь он показывает список следующим образом:

Post 1 (post_type = actie)
Post 2 (post_type = actie)
Post 3 (post_type = actie)
Post 4 (post_type = arrangement)
Post 5 (post_type = arrangement)
Post 6 (post_type = arrangement)

Я хочу, чтобы он отображался так:

Post 1 (post_type = actie)
Post 2 (post_type = arrangement)
Post 3 (post_type = actie)
Post 4 (post_type = arrangement)
Post 5 (post_type = actie)
Post 6 (post_type = arrangement)

Может кто-нибудь объяснить мне, как это исправить?

РЕДАКТИРОВАТЬ: я отредактировал свой код в соответствии с ответом Ананта Сингха --- жить D ie.

1 Ответ

1 голос
/ 04 апреля 2020

Хорошо, я не буду писать там целые HTML, просто предоставив вам внешнюю структуру:

function carousel_acties_arrangementen() {
    ob_start();
    $currentID = get_the_ID();
    $args = array(
        'post_type' => array('actie', 'arrangement'),
        'posts_per_page' => '6',
        'order' => 'ASC',
        'orderby' => 'meta_value',
        'post__not_in' => array($currentID),
    );


    $acties_arrangementen = new WP_Query($args);
?>

    <?php if ($acties_arrangementen->have_posts()) : ?>
        <?php 

            list($actiePost,$arrangementPost) = array_chunk($acties_arrangementen->get_posts(),3);
        ?>

        <?php foreach($actiePost as $key=>$value){?>

            <div>
                actie post data
            </div>
            <?php if(isset($arrangementPost[$key])){?>
                <div>
                    arrangement post data
                </div>
            <?php } ?>
        <?php } ?>
    <?php endif; ?>
<?php
return ob_get_clean();
}
add_shortcode('acties_arrangementen', 'carousel_acties_arrangementen');
...