Почему запись типа post_type не подхватывает singe?

Ссылка скопирована
PHP
1 ответ

Здравствуйте, подскажите в чем дело, зарегистрировал запись type_post=retraining, и он не хочет подхватывать созданный макет типа single.php пробовал создать еще файл single-retraining.php и он все равно не хочет подхватывать созданный макет страницы. Вот страница которая выводит посты

Почему запись типа post_type не подхватывает singe?

<?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">×</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">×</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">×</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">×</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(); ?>

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

Почему запись типа post_type не подхватывает singe?

Дополнительно:

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

где:

  1. Template Name - это название шаблона, которое будет отображаться в выпадающем списке шаблонов (на Вашем первом скрине установлен шаблон с названием «Переподготовка»)
  2. 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 */ ?>

, то Вам просто необходимо создать пост на вкладке «Переподготовка»

  • Владимир Брумер,

    Почему запись типа post_type не подхватывает singe?

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

  • Владимир Брумер, все разобрался в чем была проблема, после того как обновил структуру ссылок он начал цеплять шаблон single-retraining.php. Но теперь мне стало интересно последовательность ссылок как настроить правильно будет
  • Ответы:

    У вас на первом скрине page

    А Template Name: Пост 2 лишнее

    • Да это page которая выводит посты типа post_type=retraining, что в целом она выводит, но по какой-то причине я не могу попасть в сам пост, хотя ссылка проставляется
    • while ( have_posts() ) :
      the_post();
      ?>

      вероятно надо выполнить до вызова the_title и подобных

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Андрей PHP Ответ

    Для кастомного типа записи 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'],
    ]);

    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

    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(); ?>

    <?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.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно