Пользовательский тип сообщения - Страница шаблона не найдена

У меня есть собственный тип сообщений под названием «выставочный зал». Вот код

<?php
function register_showroom_post_type() {
    $labels = array(
    'name'               => _x( 'Showroom Cars', 'post type general name' ),
    'singular_name'      => _x( 'Showroom Car', 'post type singular name' ),
    'add_new'            => _x( 'Add Showroom Car'  ),
    'add_new_item'       => __( 'Add New Showroom Car' ),
    'edit_item'          => __( 'Edit Showroom Car' ),
    'new_item'           => __( 'New Showroom Car' ),
    'all_items'          => __( 'All Showroom Cars' ),
    'view_item'          => __( 'View Showroom Car' ),
    'search_items'       => __( 'Search Showroom Listings' ),
    'not_found'          => __( 'No Showroom listings found' ),
    'not_found_in_trash' => __( 'No Showroom listings found in the Trash' ),
    'parent_item_colon'  => '',
    'menu_name'          => 'Showroom Cars',
  );
  $args = array(
    'labels'        => $labels,
    'description'   => 'Holds the showroom cars and specific data',
    'public'        => true,
    'menu_position' => 5,
    'supports'      => array( 'title', 'thumbnail' ),
    'has_archive'   => true,
    'menu_icon'     => 'dashicons-admin-network',
  );
  register_post_type( 'showroom', $args );
}
add_action( 'init', 'register_showroom_post_type' );

function showroom_updated_messages( $messages ) {
  global $post, $post_ID;
  $messages['showroom'] = array(
    0 => '',
    1 => sprintf( __('Car listing updated. Nice one. <a href="%s">View Car</a>'), esc_url( get_permalink($post_ID) ) ),
    2 => __('Custom field updated.'),
    3 => __('Custom field deleted.'),
    4 => __('Car listing updated.'),
    5 => isset($_GET['revision']) ? sprintf( __('Car listing restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
    6 => sprintf( __('Car listing published. Sell that beast! <a href="%s">View the listing</a>'), esc_url( get_permalink($post_ID) ) ),
    7 => __('Car listing saved.'),
    8 => sprintf( __('Car listing submitted. <a target="_blank" href="%s">Preview car listing</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
    9 => sprintf( __('Car listing scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview car listing</a>'), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
    10 => sprintf( __('Car listing draft updated. <a target="_blank" href="%s">Preview Car listing</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
  );
  return $messages;
}
add_filter( 'post_updated_messages', 'showroom_updated_messages' );

function taxonomies_showroom() {
  $labels = array(
    'name'              => _x( 'Car Manufacturers', 'taxonomy general name' ),
    'singular_name'     => _x( 'Car Manufacturer', 'taxonomy singular name' ),
    'search_items'      => __( 'Search Car Manufacturers' ),
    'all_items'         => __( 'All Car Manufacturers' ),
    'parent_item'       => __( 'Parent Car Manufacturer' ),
    'parent_item_colon' => __( 'Parent PCar Manufacturer:' ),
    'edit_item'         => __( 'Edit Car Manufacturer' ),
    'update_item'       => __( 'Update Car Manufacturer' ),
    'add_new_item'      => __( 'Add New Car Manufacturer' ),
    'new_item_name'     => __( 'New Car Manufacturer' ),
    'menu_name'         => __( 'Car Manufacturers' ),
    'show_ui'           => true,
  );
  $args = array(
    'labels' => $labels,
    'hierarchical' => true,
  );
  register_taxonomy( 'car_manufacturers', 'showroom', $args );
}
add_action( 'init', 'taxonomies_showroom', 0 );

?>

Это создает панель администратора и т. д., и я могу нормально создавать сообщения. У меня есть файл single-showroom.php, который отлично отображает тип сообщения.

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

<?php
    /**
    *Template Name: Showroom 2
    *Description: Creates a gallery of featured images from the showroom post type
    */

    get_header();
?>

<p>SHOWROOM 2 PAGE</p>

<?php
$args = array( 'post_type' => 'showroom', 'posts_per_page' => 10 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
    the_title();
    echo '<div class="entry-content">';
    the_content();
    echo '</div>';
endwhile;
?>

<?php get_footer(); ?>

Я создал страницу демонстрационного зала и установил шаблон «Шоурум 2», но эта страница не отображается. Вместо этого отображается страница archive.php.

У меня есть другой настраиваемый тип сообщений, называемый «аукцион», и при тестировании с этим файлом шаблона заголовки «аукцион» отображаются нормально. Так что это заставляет меня думать, что у меня что-то не так в создании типа сообщения. Я не вижу!

Почему мой тип сообщения Showroom не отображается с этим шаблоном?

[РЕДАКТИРОВАТЬ]

Я запускаю все это локально, поэтому я установил еще одну свежую копию Wordpress, создал свой собственный тип записи (у меня он есть в виде плагина), скопировал файл моего шаблона, который я хотел использовать, и все заработало нормально!

Единственное, о чем я могу думать, это то, что я создал посты «демонстрационный зал» до того, как перенес пользовательский тип поста в плагин. Когда я создал пользовательские сообщения «аукцион», я уже сделал это настраиваемым сообщением «аукцион» с помощью плагина.

Так что, возможно, есть какой-то изворотливый конфликт.

Я собираюсь удалить сообщения «выставочного зала» из базы данных и посмотреть, что произойдет...

[РЕДАКТИРОВАТЬ 2]

После дальнейшего изучения эта проблема возникает только тогда, когда я устанавливаю постоянные ссылки на «Имя сообщения». Например, если я выберу «Числовой», отобразится файл шаблона.

Кто-нибудь знает, почему это может быть?

[РЕШЕНИЕ]

Спасибо всем за ваши предложения. В конце концов, это было так же, как Fyn предложил проблему с именем.

В конце концов я изменил имя пользовательского типа сообщения с «выставочный зал» на «автомобиль», и все в порядке!

Это было ужасно! Потерял около дня своей жизни... ах, радости кодирования :)


person Steviehype    schedule 17.04.2014    source источник
comment
изменить слаг страницы, надеюсь, это сработает.   -  person Anjana    schedule 17.04.2014


Ответы (5)


Я думаю, что может быть конфликт имен. Ну, у меня был один раз. Если для вашего типа сообщений есть архив, его имя автоматически называется «выставочный зал», поэтому, возможно, он выбирает архив выставочного зала, а не страницу выставочного зала. Вы пытались переименовать свою страницу, чтобы проверить, нет ли конфликта?

Или, может быть, вам следует рассмотреть возможность использования archive-showroom.php для отображения всех ваших сообщений в выставочном зале! Это был бы самый простой способ.

Вот также несколько ссылок, которые могут вам помочь:

https://codex.wordpress.org/Post_Type_Templates

https://developer.wordpress.org/themes/template-files-section/page-template-files/

http://codex.wordpress.org/Post_Types

person Fyn    schedule 17.04.2014
comment
Спасибо. Я просто снова вчитывался в структуру. Возможно, я делаю это неправильно. Если я хочу создать страницу для отображения одного пользовательского типа сообщений и стиля отображения этого типа сообщений, например, сетки и т. д. Нужно ли мне создавать страницу архива для этого типа сообщений и создавать там структуру? ИЛИ Файл шаблона для страницы, которую я создал в своей панели администратора? Какой правильный метод? - person Steviehype; 17.04.2014
comment
Ну, конечно, вы можете сделать и то, и другое, но, как я уже сказал, архив будет более простым решением, потому что вам нужно только создать archive-showroom.php, поместить туда обычный цикл, и он должен работать. Он распознает, что это страница архива витрины, и берет посты только оттуда. Кажется проще, не так ли ^^ В этом архиве собраны все статьи-витрины. Если вы хотите отобразить один пост-витрину, вы можете создать файл single-showroom.php, а также поместить туда обычный цикл, и он будет использоваться, если отображается один пост этого типа. - person Fyn; 17.04.2014
comment
Что касается стиля: вы можете использовать любую структуру в этих файлах шаблонов. И, возможно, вам будет полезно знать, что существуют функции WordPress, которые вы можете использовать для динамического отображения некоторых классов codex.wordpress. org/Function_Reference/post_class - person Fyn; 17.04.2014
comment
Спасибо, это полезно знать. Я понимаю, что вы говорите, я думаю, что я думаю, что иногда легче всегда правильный путь! :) При этом я до сих пор не могу понять, ПОЧЕМУ пользовательский тип сообщения «демонстрационный зал» не видит файл шаблона, а мой пользовательский тип сообщения «аукцион» (который был скопирован из «демонстрационного зала» и соответствующим образом скорректирован) действительно видит файлы шаблонов... сводишь меня с ума! Я создам новый экземпляр выставочного зала и посмотрю, что произойдет. - person Steviehype; 17.04.2014
comment
Была проблема с названием. Спасибо! - person Steviehype; 17.04.2014
comment
Без проблем! Рад, что ты это понял :) - person Fyn; 17.04.2014

Вот ссылка на иерархию шаблонов шаблона wordpress

https://codex.wordpress.org/images/1/18/Template_Hierarchy.png

Надеюсь, это поможет вам.

person wanderer    schedule 17.04.2014
comment
Спасибо. Глядя на это, можно предположить, что, когда WordPress отображает страницу для пользовательского типа сообщения, он ищет файл archive-POSTTYPE.php. Я хочу в конечном итоге отобразить тип сообщения в выставочном зале в виде сетки. Я подумал, что мне нужен файл шаблона (без боковой панели и т. д.), который запрашивал тип сообщения «демонстрационный зал» и отображал их в сетке. Это нормально? Или мне нужно создать страницу архива, чтобы сделать это? - person Steviehype; 17.04.2014

Вы можете добиться этого:

   global $post;
   if ($post && $post->ID = 123) {
     include TEMPLATEPATH . '/single-123.php';
     exit();
   }

поместите этот код в конец файла functions.php. Измените 123 на идентификатор вашего поста

person Touqeer Shafi    schedule 17.04.2014
comment
Спасибо, но один пост отображается нормально. Я не понимаю, следует ли мне использовать страницу архива или файл шаблона для отображения моего пользовательского типа сообщения «демонстрационный зал». (Я хочу в конечном итоге отображать сообщения выставочного зала в виде сетки) - person Steviehype; 17.04.2014

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

'add_new'  => _x( 'Add Showroom Car'  ),

Так должно быть

'add_new'  => _x( 'Add Showroom Car', 'post type general name' ),

Если вам действительно нужен шаблон page.php для отображения пользовательских типов сообщений, вы можете проверить эти вопросы и ответы, которые я сделал по этому поводу.

person Pieter Goosen    schedule 17.04.2014
comment
Спасибо за это, обязательно прочитаю. Я внес правку в свой исходный пост. Поэтому я не думаю, что отсутствующий аргумент вызывает проблему. Но, как я уже сказал, я посмотрю и на это. Спасибо. - person Steviehype; 17.04.2014

Я заметил, что иногда переход в «Настройки» -> «Постоянные ссылки» и нажатие «Сохранить изменения» иногда решает проблему.

person Techlands    schedule 03.07.2018