Поддержка Проблемы и решения Single.php выводит последнюю страницу цикла по всем ссылкам

  • Решено psyjet

    (@psyjet)


    Добрый вечер,

    Проблема следующая — при открытии из списка статей в блоге выводится только последняя страница из цикла.
    Подскажите, как можно это исправить?
    Используется кастомный single-blog.php

    <?php
    get_header(); ?>
    <?php
    
    $args = array(
    
        'post_type' => 'blog',
    
        'publish' => true,
    
        'paged' => get_query_var('paged'),
    
        'posts_per_page' => -1,
    
        'order' => 'ASC'
    );
    
    $blog = new WP_Query($args);
    $blog_item_ids = array();
    if ($blog->have_posts()){
        while ( $blog->have_posts() ){
            $blog->the_post();
            $blog_item_ids[] = get_the_ID();
        }
    }
    global $wp_query;
    $blog_item_id = $wp_query->post->ID;
    $current_key = array_search($blog_item_id, $blog_item_ids);
    $prev_id = $blog_item_ids[($current_key-1)];
    $next_id = $blog_item_ids[($current_key+1)];
    if(!$prev_id){
        $prev_id = end($blog_item_ids);
    }
    if(!$next_id){
        $next_id = $blog_item_ids[0];
    }
    
    $photopage_album_prev = get_post($prev_id);
    $blog_item_guid_prev = get_the_guid($prev_id);
    $blog_item_title_prev = get_field('blog_item_title', $prev_id);
    $blog_item_image_prev = get_field('blog_item_image', $prev_id);
    
    $photopage_album_next = get_post($next_id);
    $blog_item_guid_next = get_the_guid($next_id);
    $blog_item_title_next = get_field('blog_item_title', $next_id);
    $blog_item_image_next = get_field('blog_item_image', $next_id);
    
    $blog_item_content_title = get_field('blog_item_content_title');
    $blog_item_content = get_field('blog_item_content', false, 'text');
    $blog_item_content = str_replace('<p>', '<p class="text">', trim($blog_item_content));
    $blog_item_content = str_replace('<img class="', '<img class="pic ', trim($blog_item_content));
    ?>
        <!-- SECTIONS -->
        <div class="blog-page">
    
            <section class="blog-page-block">
                <div class="wrapper_small">
                    <a href="<?php echo get_site_url(); ?>/blog" class="back-link back-link_top">ВЕРНУТЬСЯ</a>
    
                    <h2 class="heading">
                        <?php echo $blog_item_content_title;?>
                    </h2>
    
                    <?php echo $blog_item_content;?>
    
                    <a href="<?php echo get_site_url(); ?>/blog" class="back">ВЕРНУТЬСЯ В РАЗДЕЛ</a>
                </div>
            </section>
    
            <section class="items-navigation">
                <div class="wrapper">
                    <div class="items">
                        <div class="item item_left">
                            <div>
                                <p class="item-heading">
                                    <?php echo $blog_item_title_prev;?>
                                </p>
    
                                <a href="<?php echo $blog_item_guid_prev;?>" class="back-link hidden-md">ПОСМОТРЕТЬ</a>
                                <a href="<?php echo $blog_item_guid_prev;?>" class="back-link show-md">ПРЕДЫДУЩИЙ</a>
                            </div>
    
                            <img src="<?php echo $blog_item_image_prev['url'];?>" alt="pic" class="preview-pic">
                        </div>
                        <div class="item item_right">
                            <img src="<?php echo $blog_item_image_next['url'];?>" alt="pic" class="preview-pic">
    
                            <div>
                                <p class="item-heading">
                                    <?php echo $blog_item_title_next;?>
                                </p>
    
                                <a href="<?php echo $blog_item_guid_next;?>" class="back-link next hidden-md">ПОСМОТРЕТЬ</a>
                                <a href="<?php echo $blog_item_guid_next;?>" class="back-link next show-md">СЛЕДУЮЩИЙ</a>
                            </div>
                        </div>
                    </div>
                </div>
            </section>

    Что характерно — заголовки и фото внизу страницы подцепляются из соседних тем. На странице, которую нужно вывести — нет.

    Буду признателен за помощь!

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Код блока с анонсами

            <div id="blog_items">
                <section class="blog-items">
                <?php if ($blog->have_posts()): ?>
                    <?php
                    while ( $blog->have_posts() ) :
                        $blog->the_post();
                        $blog_item_guid = get_the_guid();
                        $blog_item_title = get_field('blog_item_title');
                        $blog_item_excerpt = get_field('blog_item_excerpt');
                        $blog_item_image = get_field('blog_item_image');
                        $blog_item_date = get_the_date('d.m.Y');
                        ?>
                        <div class="item">
                            <div class="pic-block">
                                <img src="<?php echo $blog_item_image['url'];?>" alt="pic" class="pic">
                            </div>
                            <div class="text-block">
                                <h2 class="heading">
                                    <?php echo $blog_item_title;?>
                                </h2>
                                <p class="text">
                                    <?php echo $blog_item_excerpt;?>
                                </p>
                                <p class="date">
                                    <span><?php echo $blog_item_date;?></span>
                                    <a href="<?php echo $blog_item_guid;?>" class="read-more">ЧИТАТЬ ПОЛНОСТЬЮ</a>
                                </p>
                            </div>
                        </div>
    
                    <?php endwhile; ?>
                <?php endif; ?>
                </section>

    В скрипте выдачи статьи(не каталога) надо добавить в конце цикла if строку
    wp_reset_postdata();

    Вот так выдача контента становится правильной:

    if ($blog->have_posts()){
        while ( $blog->have_posts() ){
            $blog->the_post();
            $blog_item_ids[] = get_the_ID();
        }
    wp_reset_postdata();
    }
Просмотр 2 ответов — с 1 по 2 (всего 2)