Intereting Posts
Корневой слизень таксономии, возвращающийся 404 Мобильная версия и URL-адрес Rewrite Опубликовать в ожидании статью с передней стороны с помощью кнопки? Относительные абсолютные URL-адреса: какие из них следует использовать для междоменной переносимости? Один комментарий по электронной почте пользователя за сообщение WP REST возвращает значение функции ошибки из запроса Создание различных элементов галереи галереи границ WooCommerce – добавление атрибутов продукта в CSV-экспорт Изменить loop.php для пустой настройки поиска Как получить заголовок страницы с идентификатором страницы? Загрузка видео в vimeo с использованием его API в обход ограничений на php-сервер Страница с формой, позволяющая аутентифицированному пользователю вводить данные в базу данных Что такое функция php для «общего профиля пользователя», Как изменить поле в базе данных через кнопку отправки или флажок? Запросить более 1000 просмотров

Некоторые проблемы с отображением пользовательских типов сообщений в шаблонах

У меня есть детская тема из Twenty Thirteen, и я настраиваю пользовательские типы сообщений для нескольких элементов. Они появляются в панели мониторинга, я могу создавать пользовательские сообщения, и они отображаются в разных категориях, потому что я вызывал $query->set() с пользовательскими типами сообщений. Я сохранил и повторно сохранил Permalinks много раз, чтобы очистить перезаписи.

Вот как я зарегистрировал его в functions.php

 $labels_successstories = array( // my various labels are in here ); $args_successstories = array( 'labels' => $labels_successstories, 'public' => true, 'menu_position' => 29, 'supports' => array( 'title', 'editor', 'thumbnail' ), 'taxonomies' => array( 'category' ), 'has_archive' => 'success-stories', 'rewrite' => array( 'slug' => 'success-stories' ) ); register_post_type( 'successstories', $args_successstories ); 

В настройках> Постоянная ссылка> Пользовательская структура>

 /%category%/%postname%/ 

Вот как я вызываю $query->set() в functions.php

 function get_custom_posts( $query ) { if ( ! is_admin() && empty($query->query_vars['suppress_filters']) ) { // is not in Dashboard (is_admin => Dashboard) if ( is_home() ) { // home page - show only animal posts return $query->set( 'post_type', array( 'post', 'successstories', 'another-post-type' ) ); } else if ( is_search() ) { // search page - show only posts, pages and custom post types return $query->set( 'post_type', array( 'post', 'page', 'successstories', 'another-post-type' ) ); } else if ( ! is_single() ) { // everything else, EXCEPT for Singles, show everything return $query->set( 'post_type', array( 'post', 'page', 'attachment', 'successstories', 'another-post-type' ) ); } } } add_filter( 'pre_get_posts', 'get_custom_posts' ); 

Моя цель – удалить столько категорий, сколько я могу, так как пользовательские типы сообщений будут эффективно заменять большинство этих категорий. Тем не менее, одному из моих пользовательских типов сообщений все равно потребуется несколько категорий.

Вот вопросы / вопросы:

1) Когда я mysite.com/success-stories/ к mysite.com/success-stories/ , он использует шаблон archive.php по умолчанию. Тем не менее, я создал шаблон под названием archive-successstories.php и он полностью игнорируется. (если это имеет значение, шаблон single-successstories.php работает отлично)

2) Когда я mysite.com/success-stories/ на mysite.com/success-stories/ , я вижу сообщения, но они поступают со всех сообщений, пользовательских типов сообщений и категорий. Я просто хочу видеть сообщения из successstories пользовательских сообщений successstories когда я туда иду. Я думаю, что знаю, как это исправить, но если шаблон архива игнорируется, то мое исправление не будет видно.

3) Прямо сейчас, Истории успеха (Пользовательские типы сообщений) также находятся в категории с именами success-stories которым можно получить доступ в mysite.com/category/success-stories и отображать правильные сообщения. Однако моя цель – удалить эту категорию, поскольку она не нужна. Как только я получу эти настраиваемые типы сообщений, чтобы показать их на соответствующих страницах архива, соответствующие категории будут излишними.

Три вопроса за сообщение не типичны; однако, поскольку все они могут быть взаимосвязаны, я попытаюсь помочь шаг за шагом по очереди.

Первая проблема может быть простой:

Когда я перехожу к mysite.com/success-stories/, он использует шаблон archive.php по умолчанию. Тем не менее, я создал шаблон под названием archive-successstories.php, и он полностью игнорируется.

Использование шаблона архива определяется параметром 'has_archve' в вашем вызове register_post_type() , который вы добавили так:

 'has_archive' => 'success-stories' 

Однако для Codex ожидается, что 'has_archive' будет string/boolean : ie true или false . Попробуйте это вместо этого:

 'has_archive' => true 

Затем очистите правила перезаписи, загрузив страницу Settings -> Permalinks .

Важное примечание . URL-адрес, чтобы отобразить архив CPT с использованием archive-successstories.php будет example.com/successstories , а не example.com/success-stories . Если вы хотите использовать последнее, вам нужно передать действительный параметр 'rewrite' to register_post_type() . Обратите внимание, что 'rewrite' , если не boolean , должен быть массивом , а не строкой .

Вся проблема была в моих фильтрах. Последний был захватывающим для всего, что еще не было определено …

 } else if ( ! is_single() ) { // everything else, EXCEPT for Singles, show everything return $query->set( 'post_type', array( 'post', 'page', 'attachment', 'successstories', 'another-post-type' ) ); } 

Я исправил все три вопроса, добавив (! is_archive()) к этому последнему условному …

 } else if ( (! is_single()) && (! is_archive()) ) { return $query->set( 'post_type', array( 'post', 'page', 'attachment', 'successstories', 'another-post-type' ) ); } 
  • шаблоны архивов теперь находятся
  • в архиве отображаются только сообщения из соответствующего пользовательского типа сообщения
  • нет конфликтов с какой-либо категорией, разделяющей одно и то же имя слива. ( хотя я все равно удалю их, потому что они теперь лишние и лишние ).

EDIT :

Теперь, когда я очистил таксономию, удалил лишние категории, то все else if ( (! is_single()) && (! is_archive()) ) даже не требуется. Спасибо Чип за предложение!

Почему бы вам не добавить поддержку для регистрации пользовательских типов таксономии, а не использовать категории с вашими CPT?

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

Вам нужно только has_archive, если вы хотите использовать собственный шаблон archive-cpt.php, иначе WordPress генерирует стандартный архив.

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

 'has_archive' => true, 

Вам понадобится эта строка, если вы используете register_taxonomy с вашим CPT.

Если ваш CPT называется портфолио, вы добавляете указанную выше строку в свой код, чтобы зарегистрировать CPT и имя CPT в шаблон пользовательского архива, который в этом случае будет:

 archive-portfolio.php