WordPress Игнорирует Мои Пользовательские Шаблоны Типов Сообщений?


WordPress содержит 404 всех моих пользовательских сообщений типа сообщений. Я пропустил здесь какой-то шаг?

Я использую следующее для настройки своего CPT:

function custom_post_types() {  
  register_post_type(
    'creativework',
    array(
      'labels' => array(
        'name' => _x('Works', 'post type general name'),
        'singular_name' => _x('Work', 'post type singular name'),
        'add_new' => _x('Add New', 'Work'),
        'add_new_item' => __('Add New Work'),
        'edit_item' => __('Edit Work'),
        'new_item' => __('New Work'),
        'all_items' => __('All Works'),
        'view_item' => __('View Work'),
        'search_items' => __('Search Works'),
        'not_found' =>  __('No Works found'),
        'not_found_in_trash' => __('No Works found in Trash'), 
        'parent_item_colon' => '',
        'menu_name' => __('Works')
      ),
      'public' => true,
      'menu_position' => 5,
      //'rewrite' => array('slug' => 'work'),
      'supports' => array('title', 'editor', 'thumbnail'),
      'has_archive' => 'true'
    )
  );
}

add_action( 'init', 'custom_post_types' );

Изначально у меня было подчеркивание в типе (creative_work), переписывая слаг, чтобы он был просто "рабочим", но я понятия не имел, какую перестановку WordPress будет использовать для поиска шаблона - я попробовал имена файлов, такие как single-creative_work.php, single-creativework.php, single-work.php, все под themes/roots/ (я использовал Корни в качестве базовой темы), с содержание:

<?php get_template_part('templates/content', 'work'); ?>

Но themes/roots/templates/content-work.php никогда не отображался. Вместо этого казалось, что themes/roots/page.php подавали? Когда я вручную отредактировал page.php в get_template_part('templates/content', 'work') в качестве теста, он, по-видимому, использовал шаблон, который я хотел, но затем у него был идентификатор записи или что-то не так, когда он отображал домашнюю страницу для ЧЕГО-ЛИБО под website.com/creativework/.

В попытке устранить все возможные конфликты я деактивировал корни в пользу Twentythirteen и отключил все плагины, кроме одного, того, который я написал для настройки CPT (код вверху). Теперь, всякий раз, когда я нажимаю website.com/creativework/ или website.com/creativework/post-title (следуя постоянной ссылке из "Просмотр работы" в редакторе сообщений или в результатах поиска), я получаю 404 вместо домашней страницы, несмотря на то, что single-creativework.php и archive-creativework.php существуют под themes/twentythirteen.

РЕДАКТИРОВАТЬ: website.com/?creativework=post-title, тем не менее, работает.

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

Author: Hugh Guiney, 2013-09-10

3 answers

Понял. Я пытался использовать flush_rewrite_rules() для активации/деактивации плагина, как это:

function creativeworks_activate() {
  // register taxonomies/post types here
  flush_rewrite_rules();
}

function creativeworks_deactivate() {
  flush_rewrite_rules();
}

register_activation_hook( __FILE__, 'creativeworks_activate' );
register_deactivation_hook( __FILE__, 'creativeworks_deactivate' );

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

Спасибо Майло за то, что указал мне правильное направление.

 2
Author: Hugh Guiney, 2013-09-14 17:23:54

У вас есть ошибка в аргументах register_post_type, которая может вызывать проблемы во внешнем интерфейсе. Этот аргумент:

 'has_archive' => 'true'

Должно быть:

 'has_archive' => true

Правильное имя файла для одного шаблона вашего пользовательского типа публикации (creative_work) - single-creative_work.php и должно быть в папке вашей темы . Например, если ваша тема называется "my_theme", файл single-creative_work.php должен находиться в wp-content/themes/my_theme/single-creative_work.php. Вы также можете включить файлы шаблонов из разных расположений с помощью функция template_include().

Структура папок, о которой вы говорите, не является обычной в Wordpress (roots/lib/, roots/templates/, и т.д.). Эти папки из плагина?

 0
Author: cybmeta, 2013-09-11 08:22:31

Я также использую корни, и у меня есть небольшой обходной путь (не очень красивый, но для меня он помогает все организовать). В корне каталога шаблонов есть single.php. Там вы можете поместить:

if(is_singular('creativework')){
    get_template_part('templates/creativework', 'header');
    get_template_part('templates/creativework', 'main');
}

Затем вы бы поместили creativework-header.php и creativework-main.php в каталог шаблонов. Я использую этот метод, потому что у меня есть несколько пользовательских типов записей, и таким образом я могу использовать свое собственное имя вместо большого количества файлов single-cptname.php. Я фактически удалил все содержимое single.php и поставьте вышеуказанную функцию (и еще несколько для каждый тип сообщения) есть. Кроме того, я могу включить несколько частей шаблона для каждого пользовательского типа записи (в некоторых их может быть до 5). Это позволяет лучше организовать мои вещи!

PS, вы уверены, что имя вашего пользовательского типа записи creativework, а не creative-work?

 0
Author: eskimo, 2013-09-11 09:05:50