Поддержка Проблемы и решения Переход на архив вместо страницы

  • Всем привет.

    Подскажите, может кто то сталкивался с таким. У меня на паре страниц перестало отображаться содержимое которое должно быть на соответствующей странице.

    При переходе по ссылке на такую страницу отображается: Архив:название_страницы т.е. если есть страница Новости то отображается Архив: новости и содержимое страницы абсолютно не то что должно быть.

    На сайте 5 страниц и только 2 некорретно отображаются.

    В постоянных ссылках если поставить «Простые» то все страницы нормально отображаются.

    Если же поставить «Название записи» возникате такая ситуация.

    Самое интересное, часть страниц работает корректно, а пара нет..

    Почему то используется arhive.php. Это уже проверил..

    • Тема изменена 4 года, 2 месяца назад пользователем shiva2019.
    • Тема изменена 4 года, 2 месяца назад пользователем shiva2019.
    • Тема изменена 4 года, 2 месяца назад пользователем shiva2019.
Просмотр 11 ответов — с 1 по 11 (всего 11)
  • Модератор Yuri

    (@yube)

    Коллизии могут возникать, если слаги страницы и рубрики совпадают и при этом из url рубрики убрано /category/.

    Буду искать.

    У меня эти проблемы начались после очередного созданного кастомного типа постов. Создал отдельный файл который подключается в functions.php

    В этом отдельном файле прописал создание нескольких кастомных постов. Некоторые с таксономией для них, некоторые без.

    Сейчас законментировал все что касается кастомных постов. Убрал в страницах шаблоны. В итоге обе «проблемные» страницы переходят на главную, при том что ссылка в меню показывает куда надо ссылку..

    Модератор Yuri

    (@yube)

    Сейчас законментировал все что касается кастомных постов.

    После таких манипуляций полезно пересохранять настройки постоянных ссылок.

    Обновил. Но погоды это не сделало.

    Сделал откат на более раннее состояние как файлов так и БД.

    Изменил URL страниц. У меня были одинаковые имена с именами post-type.

    Т.е. к примеру есть post-type «news» и страница localhost/project/news поменял на localhost/project/novosti

    Докинул в свою тему свои php-файлы последние. Обновил постоянные ссылки. В итоге ссылки заработали.

    Но теперь когда я захожу на новости и в списке щелкаю переход читать новость..у меня почему то переходит на пост из общей категории постов а не кастомных.

    Выборку по кастомному типу для списка новостей делаю так:

    
     <?php
    	    $posts = get_posts( array(
    		    'numberposts' => 0,
    		    'orderby'     => 'date',
    		    'order'       => 'ASC',
    		    'include'     => array(),
    		    'exclude'     => array(),
    		    'meta_key'    => '',
    		    'meta_value'  =>'',
    		    'post_type'   => 'news',
    		    'suppress_filters' => true,
    	    ) );
    
    	    foreach( $posts as $post ){
    		    setup_postdata($post);
    		    ?>
    
                <div class="news-item">
                    <a href="<?php the_permalink()?>" class="post-img-a"><img src="<?php the_post_thumbnail_url()?>" alt="<?php the_title()?>" class="news-item__img"></a>
    
                    <h3 class="news-item-header"><?php the_title()?></h3>
                    <p class="news-item-content"><?php echo strip_tags(get_the_excerpt(), '<p>'); ?></p>
    
                    <div class="news-detail-wrapper">
                        <p class="data-post"><?php echo get_the_date() ?></p>
                        <p class="news-detail"><a href="<?php the_permalink()?>" class="detail-inner">Читать далее</a></p>
                    </div>
    
                </div>
    	    <?php }
    
    	    wp_reset_postdata();
    
    	    if(count($posts) == 0){?>
                <p class="absent_goods">В данной категории нет новостей!</p>
    	    <?php } ?>
    

    и через и по url видно что адрес правильный. Однако содержимое не верно.

    Как вообще происходит передача в single-(post-type).php информации какой пост выводится? Я сделал свой single-news.php на основе single.php созданный в underscores.me
    ниже привожу ту часть кода которая относится в выводу информации поста:

    
    		<?php
    			while ( have_posts() ) :
    				the_post();
    
    			    echo "post_number = ".get_the_ID()  ;
    				get_template_part( 'template-parts/content', get_post_type() );
                    ?>
                    <div class="news-item">
                        <div class="news-item__img_wrapper">
                            <img src="<?php the_post_thumbnail_url()?>" alt="<?php the_title()?>" class="news-item__img">
                        </div>
    
                        <h3 class="news-item-header"><?php the_title()?></h3>
                        <p class="news-item-content"><?php echo strip_tags(get_the_content(), '<p>'); ?></p>
                        <p class="data-post"><?php echo get_the_date() ?></p>
                    </div>
                    <?php
    				the_post_navigation();
    
    				// If comments are open or we have at least one comment, load up the comment template.
    				if ( comments_open() || get_comments_number() ) :
    					comments_template();
    				endif;
    
    			endwhile; // End of the loop.
    			?>
    
    • Ответ изменён 4 года, 2 месяца назад пользователем shiva2019.
    Модератор Yuri

    (@yube)

    Как вообще происходит передача в single-(post-type).php информации какой пост выводится?

    Движок разбирает по регулярным выражениям запрошенный адрес;
    определяет что именно нужно выводить;
    делает выборку записей из базы;
    ищет в Теме наиболее подходящий шаблон;
    инклюдит найденный шаблон;
    Цикл в шаблоне выводит выбранные записи;

    Механизм абсолютно идентичный для любых типов записей и любых архивов (по терму, по дате, по автору)

    Правильно ли я понимаю? Есть примеру у меня пост, к примеру «новость1«. его url localhost/project/novost1

    при переходе на пост в файле «single-(post-type).php» или просто single.php происходит поиск в базе где есть адрес localhost/project/novost1 и если такой пост найден, в single уже передаются данные этого поста?

    Сейчас для интереса зашел на обычную не кастомную запись зайдя в Записи в консоли WP.

    Перешел в редактирование записи и отуда прямо перешел по ссылке.(у меня classic редактор) В итоге у меня произошел переход на другой пост, не тот в который я зашел на редактирование. И на этот же пост(не тот что надо) я попадаю из кастомных постов..

    Модератор Yuri

    (@yube)

    Нет, не правильно. Сначала поиск в базе, потом вызов шаблона для вывода.

    Роутер должен разобрать путь /project/novost1 на тип=project и слаг=novost1, выбрать из базы нужную запись и только после этого подключить шаблон.

    Понятно. Осталось разобраться почему у меня 1 и то же пост выводится..этот код работал ранее..сейчас нет..опять где то путаница что ли..хотя ж вобще не выводит ни 1 пост нормально..буду дальше ковыряться..

    Проверил. single.php и single-news.php используются моим WP (в зависимости от типа поста). Но почему не выводит тот пост по ссылке на который перехожу — не понятно.

    Есть у меня для теста еще 1 wp на отдельной схеме БД MYSQL. Там все работает. Для интереса взял single.php оттуда и в этот где проблемы WP в тему подкинул. Разницы нет. Явно не в single.php дело. Но где копать проблему не понятно..

    в постоянных ссылках для интереса изменил на Простые..разницы нет

    • Ответ изменён 4 года, 2 месяца назад пользователем shiva2019.

    Разобрался в чем дело.

    В шапке которая подключается в single, я использовал переменную $posts для своей выборки и таким образом видимо перебиваю исходный $posts — своими значениями ее. А т.к. эта переменая в цикле используется далее — данные в ней другие.

    Заметил имя на другое и теперь все нормлаьно выбирается из БД.

    Вопрос закрыт. Спасибо всем кто пытался помочь 🙂

    • Ответ изменён 4 года, 2 месяца назад пользователем shiva2019.
    • Ответ изменён 4 года, 2 месяца назад пользователем shiva2019.
Просмотр 11 ответов — с 1 по 11 (всего 11)
  • Тема «Переход на архив вместо страницы» закрыта для новых ответов.