Почему запись типа post_type не подхватывает singe?
Здравствуйте, подскажите в чем дело, зарегистрировал запись type_post=retraining, и он не хочет подхватывать созданный макет типа single.php пробовал создать еще файл single-retraining.php и он все равно не хочет подхватывать созданный макет страницы. Вот страница которая выводит посты
<?php /* Template Name: Пост 2 Template post_type: retraining */ ?> Вот мой код single-retraining.php <?php get_header(); ?> <div class="main-title"> <div class="container-fluid p-0 m-0"> <div class="row justify-content-md-center p-0 m-0"> <div class="col-md-10"> <div class="bread"> <?php if( function_exists('kama_breadcrumbs') ) kama_breadcrumbs(); ?> </div> <div class="headings"> <h1> <?php the_title(); ?> </h1> </div> </div> </div> </div> </div> <?php while ( have_posts() ) : the_post(); ?> <main class="content"> <div class="row justify-content-md-center p-0 m-0"> <div class="col-md-9"> <?php the_content(); ?> <button type="button" data-target="modal" class="show-modal btn btn-primary btn-lg">Записаться на курс</button> </div> <?php endwhile; ?> </div> <div class="modal" tabindex="-1" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Modal title</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">&times;</span> </button> </div> <div class="modal-body"> <p>Modal body text goes here.</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div> </div> </div> <div class="modal"> <div class="modal-content"> <div class="close">&times;</div> <h4>Заполните поля</h4> <p>Что-то</p> <div class="modal-form"> <?php echo do_shortcode('[contact-form-7 id="2edbf6a" title="Контактная форма 1"]') ?> </div> </div> </div> </main> <?php get_footer(); ?> |
<?php /* Template Name: Пост 2 Template post_type: retraining */ ?> Вот мой код single-retraining.php <?php get_header(); ?> <div class="main-title"> <div class="container-fluid p-0 m-0"> <div class="row justify-content-md-center p-0 m-0"> <div class="col-md-10"> <div class="bread"> <?php if( function_exists('kama_breadcrumbs') ) kama_breadcrumbs(); ?> </div> <div class="headings"> <h1> <?php the_title(); ?> </h1> </div> </div> </div> </div> </div> <?php while ( have_posts() ) : the_post(); ?> <main class="content"> <div class="row justify-content-md-center p-0 m-0"> <div class="col-md-9"> <?php the_content(); ?> <button type="button" data-target="modal" class="show-modal btn btn-primary btn-lg">Записаться на курс</button> </div> <?php endwhile; ?> </div> <div class="modal" tabindex="-1" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Modal title</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">&times;</span> </button> </div> <div class="modal-body"> <p>Modal body text goes here.</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div> </div> </div> <div class="modal"> <div class="modal-content"> <div class="close">&times;</div> <h4>Заполните поля</h4> <p>Что-то</p> <div class="modal-form"> <?php echo do_shortcode('[contact-form-7 id="2edbf6a" title="Контактная форма 1"]') ?> </div> </div> </div> </main> <?php get_footer(); ?>
Вот код регистрации записи в function.php
function register_retraining_entities() { $retraining_args = array( 'public' => true, 'label' => null, 'labels' => array( 'name' => 'Переподготовка', 'singular_name' => 'Переподготовка', 'add_new' => 'Добавить курс Переподготовки', 'add_new_item' => 'Добавление курса Переподготовки', 'new_item' => 'Новый курс Переподготовки', 'all_items' => 'Все курсы Переподготовки', 'view_item' => 'Смотреть курс Переподготовки', 'search_items' => 'Искать курс Переподготовки', 'not_found' => 'Не найдено', 'not_found_in_trash' => 'Не найдено в корзине', 'parent_item_colon' => '', 'menu_name' => 'Переподготовка', ), 'menu_position' => 6, 'menu_icon' => 'dashicons-welcome-widgets-menus', 'rewrite' => array( 'slug' => 'retraining' ), 'supports' => array('title', 'editor', 'thumbnail'), 'has_archive' => true ); register_post_type( 'retraining', $retraining_args ); } add_action( 'init', 'register_retraining_entities' ); add_image_size('retraining-theme', 384, 384, true); |
function register_retraining_entities() { $retraining_args = array( 'public' => true, 'label' => null, 'labels' => array( 'name' => 'Переподготовка', 'singular_name' => 'Переподготовка', 'add_new' => 'Добавить курс Переподготовки', 'add_new_item' => 'Добавление курса Переподготовки', 'new_item' => 'Новый курс Переподготовки', 'all_items' => 'Все курсы Переподготовки', 'view_item' => 'Смотреть курс Переподготовки', 'search_items' => 'Искать курс Переподготовки', 'not_found' => 'Не найдено', 'not_found_in_trash' => 'Не найдено в корзине', 'parent_item_colon' => '', 'menu_name' => 'Переподготовка', ), 'menu_position' => 6, 'menu_icon' => 'dashicons-welcome-widgets-menus', 'rewrite' => array( 'slug' => 'retraining' ), 'supports' => array('title', 'editor', 'thumbnail'), 'has_archive' => true ); register_post_type( 'retraining', $retraining_args ); } add_action( 'init', 'register_retraining_entities' ); add_image_size('retraining-theme', 384, 384, true);
Вот код archive-retraining.php который отвечает за вывод текста
<?php /* Template Name: Переподготовка */ ?> <?php get_header(); ?> <div class="main-title"> <div class="container-fluid p-0 m-0"> <div class="row justify-content-md-center p-0 m-0"> <div class="col-md-10"> <div class="bread"> <?php if( function_exists('kama_breadcrumbs') ) kama_breadcrumbs(); ?> </div> <div class="headings"> <h1> <?php wp_title("", true); ?> </h1> </div> </div> </div> </div> </div> <main class="content"> <div class="news-items"> <div class="row p-0 m-0"> <?php wp_reset_postdata();?> <?php $args = array( 'posts_per_page' => 999, 'post_type' => 'retraining' ); $posts = get_posts ($args); foreach( $posts as $post){ setup_postdata( $post ); ?> <div class="col-md-6 col-lg-4 col-xl-3 p-0 m-0"> <div class="card"><a href="<?php the_permalink(); ?>"> <!-- Содержимое карточки --> <!-- Изображение --> <div class="card text-white"> <img class="card-img" <?php the_post_thumbnail('events-theme'); ?> <!-- Текстовый контент --> <div class="card-img-overlay"> <div class="card-body"> <h4 class="events-title"><?php the_title(); ?> </h4> </div> <div class="events-footer"> <?php the_field( 'date_start' ); ?> <?php the_field( 'date_end' ); ?> <?php the_field( 'date_main' ); ?> </div> </div> </div> </a> </div></div> <?php } wp_reset_postdata();?> </div> </main> <?php get_footer(); ?> |
<?php /* Template Name: Переподготовка */ ?> <?php get_header(); ?> <div class="main-title"> <div class="container-fluid p-0 m-0"> <div class="row justify-content-md-center p-0 m-0"> <div class="col-md-10"> <div class="bread"> <?php if( function_exists('kama_breadcrumbs') ) kama_breadcrumbs(); ?> </div> <div class="headings"> <h1> <?php wp_title("", true); ?> </h1> </div> </div> </div> </div> </div> <main class="content"> <div class="news-items"> <div class="row p-0 m-0"> <?php wp_reset_postdata();?> <?php $args = array( 'posts_per_page' => 999, 'post_type' => 'retraining' ); $posts = get_posts ($args); foreach( $posts as $post){ setup_postdata( $post ); ?> <div class="col-md-6 col-lg-4 col-xl-3 p-0 m-0"> <div class="card"><a href="<?php the_permalink(); ?>"> <!-- Содержимое карточки --> <!-- Изображение --> <div class="card text-white"> <img class="card-img" <?php the_post_thumbnail('events-theme'); ?> <!-- Текстовый контент --> <div class="card-img-overlay"> <div class="card-body"> <h4 class="events-title"><?php the_title(); ?> </h4> </div> <div class="events-footer"> <?php the_field( 'date_start' ); ?> <?php the_field( 'date_end' ); ?> <?php the_field( 'date_main' ); ?> </div> </div> </div> </a> </div></div> <?php } wp_reset_postdata();?> </div> </main> <?php get_footer(); ?>
Не могу понять почему он не подхватывает стили, попробовал перерегистрировать запись, и он вообще перестал переходить по ссылке на эту запись, но при этом ее выводит
Дополнительно:
Xva1er,
Да это page которая выводит посты типа post_type=retraining
не верно. Вкладка «Страницы» несет в себе post_type=page
Вкладка, которая содержит посты post_type=retraining, согласно Вашему скрину, это «Переподготовка»
Если Вы желаете использовать свой шаблон для вкладки страницы, то необходимо в начале файла написать аля:
<?php #Template Name:Мой крутой шаблон #Template post type:post,page |
<?php #Template Name:Мой крутой шаблон #Template post type:post,page
где:
- Template Name - это название шаблона, которое будет отображаться в выпадающем списке шаблонов (на Вашем первом скрине установлен шаблон с названием «Переподготовка»)
- Template post type - на каких post_type данный шаблон будет доступен для выбора (в данном случае это посты и страницы)
при этом как будет называться сам файл абсолютно начхать (главное/желательно иерархию не ломать).
если вы создаете single-{post_type}.php ни Template Name, ни Template post type писать не надо. Файл будет подхватываться автоматически при создании записи на вкладке «Переподготовка».
т.е. согласно Вашим данным, если вы ходите использован указанный шаблон с названием single-{post_type}.php,
<?php /* Template Name: Пост 2 Template post_type: retraining */ ?> |
<?php /* Template Name: Пост 2 Template post_type: retraining */ ?>
, то Вам просто необходимо создать пост на вкладке «Переподготовка»
Вот я и говорю что странно, вроде как есть посты в которой создана запись, есть страница которая выступает шаблоном по выводу этих постов, сам пост она выводит, но по какой-то причине как будто не может подхватить single, при этом остальные две страницы подготовка и повышение квалификации по данному принципу работают.
Ответы:
У вас на первом скрине page
А Template Name: Пост 2 лишнее
- Да это page которая выводит посты типа post_type=retraining, что в целом она выводит, но по какой-то причине я не могу попасть в сам пост, хотя ссылка проставляется
- while ( have_posts() ) :
the_post();
?>вероятно надо выполнить до вызова the_title и подобных
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос



Для кастомного типа записи WordPress будет искать шаблон
single-retraining.phpтолько если запрос реально является одиночной записью типаretraining. Файл страницы с комментариемTemplate Nameк этому отношения почти не имеет: это шаблон страницы в админке, а не single-шаблон CPT.Проверьте регистрацию post type. Там обязательно должны быть публичные URL:
register_post_type('retraining', [ 'label' => 'Retraining', 'public' => true, 'has_archive' => true, 'rewrite' => ['slug' => 'retraining'], 'supports' => ['title', 'editor', 'thumbnail'], ]);
После изменения регистрации пересохраните постоянные ссылки: “Настройки → Постоянные ссылки → Сохранить”. Без flush rewrite rules WordPress может не понимать новые URL.
Файл должен называться строго:
single-retraining.php
И лежать в активной теме или дочерней теме. Внутри достаточно базового цикла:
<?php get_header(); ?> <main class="content"> <?php while (have_posts()) : the_post(); ?> <h1><?php the_title(); ?></h1> <?php the_content(); ?> <?php endwhile; ?> </main> <?php get_footer(); ?>
Если всё равно подхватывается не тот шаблон, поставьте Query Monitor: он покажет выбранный template. Также проверьте, нет ли фильтра
single_template, который принудительно подменяет файл.И не путайте
Template Post Type: retrainingс single-шаблоном. Это позволяет выбрать page template для записи в админке, но автоматический вывод одиночной записи CPT по URL должен идти через иерархию шаблонов:single-retraining.php, потомsingle.php, потомsingular.php, потомindex.php.