Почему у меня не работают шаблоны типа Post?

#wordpress

#wordpress

Вопрос:

Итак, согласно этой странице, в нем говорится:

single-{post_type}.php
Если ваш пользовательский тип сообщения был ‘product’ и /или query_var = «product», WordPress будет искать single-product.php для отображения единственной или постоянной ссылки на сообщение.

Итак, у меня есть этот код в моем functions.php:

 register_post_type( 'project',$args);
  

И у меня есть этот шаблон: single-project.php

Тогда почему мой пользовательский пост не использует этот шаблон?

Обновить
Используя get_post_types() , я вижу, что мой тип сообщения отсутствует в списке. Если он не зарегистрирован, то почему я могу создавать и удалять пользовательские сообщения?

 add_action('after_setup_theme','init_setup');

function init_setup() {
  add_action( 'init', 'create_post_type' );
}

function create_post_type() {
  $args = array(
    'labels' => array(
      'name' => __( 'Prosjekter' ),
      'singular_name' => __( 'Prosjekt' ),
      'add_new' => __('Nytt prosjekt')
    ),
    'public' => true,
        'show_ui' => true,
        'show_in_menu' => true,
    'has_archive' => false,
    'taxonomies' => array('category'),
    'menu_position' => 5,
    'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes','post_tag' ),
    'rewrite' => array('slug' => 'prosjekt')
  );

  register_post_type( 'project',$args);
}
  

Ответ №1:

Из Кодекса:

register_post_type следует вызывать только с помощью действия ‘init’. Он вообще не будет работать, если вызывается до ‘init’, а аспекты нового типа записей будут работать неправильно, если будут вызваны позже.

Вы пробовали зарегистрировать его таким образом?

 add_action( 'init', 'create_post_type' ); // NOT inside `init_setup()`
  

[править]

Единственное, что я могу придумать, это то, что, поскольку вы используете rewrite , вы можете захотеть удалить правила перезаписи. Также из Кодекса:

Примечание: Если вы регистрируете тип записи внутри плагина, вызовите flush_rewrite_rules() в своем хуке активации и деактивации (см. Сброс перезаписи при активации ниже). Если функция flush_rewrite_rules() не используется, вам придется вручную перейти в Настройки> Постоянные ссылки и обновить структуру постоянных ссылок, прежде чем ваш пользовательский тип записи отобразит правильную структуру.

Если вы не хотите возиться с flush_rewrite_rules() функцией в данный момент, просто зайдите в Настройки > Постоянные ссылки и повторно сохраните настройки постоянных ссылок.

Комментарии:

1. @Steven Я обновил свой ответ другим возможным решением

2. Блестяще. Я удалил повторную запись и установил постоянную ссылку на «Название публикации», и теперь это работает. Спасибо 😀

3. @Steven Отлично! Получайте удовольствие.