Сегодня попристальнее рассмотрим вопрос о произвольных типах записей и их же произвольные таксономии. Многие начинающие владельцы сайтов, как понимаю, решаются на этакое предприятие по облагораживанию (углублению, расширению… как угодно) функционала сайта! однако, что весьма напрасно, мало изучив вопрос… а потом, как следствие, сталкиваются с теми или иными проблемами: итог – разочарование!
Использовать ли произвольные типы записей на сайте/блоге это дело личное, хотя и требующее ясного представления от того что в конечном итоге хочется! Но как, скажите, проектировать площадку, ежели сам принцип функционального использования типов записей едва ли понятен.
Меня недавно некий АдмиН попросил откатить его сайт до прежнего состояния: т.е до того, как подключил “тип записей” к блогу, потому что столкнулся с проблемой отображения на сайте анонсов записей, в сайдбаре, например.
Ну, давайте, мало-мало теории, а вместе с тем по тексту дам несколько полезных кодов, для кастомизации отображения записей произвольного типа:
- как создаются произвольные типы записей и таксономии
- Custom Post Types
- новая таксономия регистрируется так
- условия для отображения, не отображения, вывода записей условных типов, таксономии
- мета – описание статьи
- как добавить в поиск по сайту произвольные типы записей
- чтобы все посты авторов сайта отображались в одном его архиве: и произвольные типы записей, и обычные
- чтобы произвольные типы записей отображались на главной странице
- как добавить произвольные типы записей в RSS ленту
как создаются произвольные типы записей и таксономии
О регистрациях нового произвольного типа записей, таксаномиях в сети есть множество теоретических и практических публикаций! так что повторяться вряд ли есть великий смысл…
Однако решил, возможно, кому-то пользы для, описать основные моменты, которые могут вызвать затруднения в реализации на сайте произвольного типа записей с соответствующими таксами.
Иногда приходят от читателей вопросы связанные с реализацией типов… спрашивают:
как вывести записи той или иной таксономии в сайдбаре? как настроить вывод записей из нескольких таксономий, причём с миниатюрами?.. и прочее и прочее…
Как бы это сказать, чтоб не обидеть – все подобные вопросы рождены, как правило, пользователями не достаточно изучившими вопрос о возможности реализации на сайте произвольных типов записей.
…не могут до конца понять и определиться что они конкретно хотят от добавочного типа… и дополнительных такономий? какой именно смысл расширения функционала сайта преследуют.
Чем, скажем, нас не устраивают стандартные “рубрики” или “метки”? ведь это тоже вполне – и кстати, оригинальные – полноценные таксономии с широчайшими возможностями.
Вообще, я всегда советую изучать интересующий вопрос в первоисточнике, в кодексaх WordPress. Так более доходчиво получится… хотя и требует кое-каких начальных знаний машинки WP, что в свою очередь и говорит о том – что если кодекс труден, вряд ли стоит приниматься к реализации того или иного функционального предприятия лично!
Мораль проста: не изучив доподлинно вопрос создания и использования ТИПОВ, вряд ли стоит приступать с обрывочными знаниями дела к реализации. На пути встретится множество непоняток!
Не так давно один человек (как он же выразился: по моему примеру) решил создать и у себя произвольные типы. Так ему осточертело в ссылках имя “category”…
Потратил неделю, пока ни пришёл к выводу, что ему эти типы не к чему не приставить!
В итоге: попросил меня, и по возможности без потерь, “откатить” его сайт в первоистоковое состояние.
Должен доложить:
Коллега всего-то ошибочно принял у меня префиксы в ссылках на рубрики и метки за типы (хотя, типы записей у меня реализованы, однако, те пока что в “личном” состоянии).
Хотя, коли есть желание всего-то изменить префиксы рубрик, меток Из статьи узнаем, как изменить префикс для рубрик, меток — использование 301 Redirect: примеры то эта задача достаточно просто решается, и без каких бы то ни было глубоких знаний.
Вот так вот!
Custom Post Types
Вкратце:
Регистрируется новый тип записей в Вордпресс с помощью следующей функции:
register_post_type()
– WP 2.9
Примечателен тот факт, что стартуя от версии 4.6 разработчиками ВП был создан новый класс WP_Post_Type
посредством которого теперь и обыгрываются все наши желания относительно произвольных типов и их выгоды.
при регистрации типа, возможно указать соответствующую типу таксономию: используется параметр taxonomies
.
Базовый пример создания типа (кстати, из кодекса ВП – ссылка выше: так что по созданию типов записей не распыляюсь):
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'acme_product', // имя типа
array(
'labels' => array(
'name' => __( 'Products' ), // имя для админки
'singular_name' => __( 'Product' ) // название единичного элемента таксономии
),
'public' => true, // (по умолчанию) true показ в админке - false НЕ показывать в админке
'has_archive' => true, // подключение файлов архивов (ядро шаблона)
)
);
}
Принципиальное использование функции:
register_post_type( $post_type, $args );
$post_type
– название типа записи. Это имя указывается, например, в php
условиях и проч… (не путать со слагом в полной ссылке).
$args
– массив, который включает в себя необходимую сводку параметров работы… К примеру, упомянутые выше параметры таксономии:
'taxonomies' => array( 'video' ),
– или, скажем, банально category – это те таксономии, которые будут связаны с новым типом записи: некий регистр… и в какой-то мере важный параметр.
Подробнее можно прочесть, к примеру, в блоге wp_kama
– автор подробно писал на эту тему, ссылку отыщете здесь …
Это для тех, которым аглицкий язык сознанию напрочь вреден) – Ссылка же кодекса WP выше.
Online консультация по настройкам и созданию сайтов на WordPress
новая таксономия регистрируется так
Функция регистрации таксономии – register_taxonomy()
Таксономии возможны в подобиях рубрик (т.е использование “дочерних” подкатегорий: древовидную таксономию), либо по типу меток.
Предположим, мы создали наши типы записей: совершенно естественно возникает вопрос о том, как бы эти типичные записи более функционально и логично обыграть на страничках нашего сайта??
Как инструкция для решения подобных (задач) вопросов, призвана вторая часть сего недлинного повествования:
условия для отображения, не отображения, вывода записей условных типов, таксономии
is_singular( ' ' )
– условный тег “для” одиночной записи произвольного типа.
<?php if (!is_singular( 'имя_типа' )) { ?>
<?php /** здесь скрываемый код ! - имя_типа или $post_type если как-то будет обыграно кодом - поставим переменную или укажем просто именем */ ?>
<?php } ?>
is_post_type_archive( ' ' )
– условный тег архива типа записей.
…к примеру, таким кодом можно закрыть/открыть страницы архивов произвольных типов записей от роботов или ещё чего-то…
/** открываем к проходу архив ТИПА ЗАПИСИ - но НЕ ИНДЕКСУ роботами **/
add_action('wp_head', 'mihalica_meta_type_robots');
function mihalica_meta_type_robots () {
if (is_post_type_archive( 'имя' )) { // имя video
echo "".'<meta name="robots" content="noindex,follow" />'."\n";
} }
/** открываем к проходу архив ТИПА ЗАПИСИ - но НЕ ИНДЕКСУ роботами **/
пример:
<?php
if (is_post_type_archive( 'имя_типа' )) { // возможен инвертер "!"
echo 'Эта страница типа записи';
} else {
echo 'НЕ страница типа';
}
?>
мета – описание статьи
Если мы хотим добавить в мета – описание статьи вывод той категории (таксономии) к которой относится запись, нам помимо прочих “информационных” функций статьи нужно добавить такие:
single_term_title();
– выведет имя категории (таксы) – без ссылки в описании!
get_the_term_list( $post->ID, 'имя_таксы', '', ',', '' );
– выведет имя и ссылку категории (таксы) – в описании!
как добавить в поиск по сайту произвольные типы записей
Предположим, регистрация произвольных типов записей и их таксономий прошла успешно!
Мы отправляемся тестировать отработку функций: создаём тестовые записи с привязками новых такс и пр.
Казус: 1 – неожиданно для нас обнаруживается, что, если ввести в поиск по сайту какое-то имя записи нового типа (поста) то его невозможно отыскать: то есть поиск по сайту будет выдавать только записи “post” основные (по умолчанию WP).
Для того чтобы нормализовать работу, т.е заставить “Поиск по сайту” шерстить Базу Данных целиком! со всеми присутствующими в ней типами записок, достаточно добавить в файл функций такой код:
/** добавление произвольных типов в поиск по САЙТУ - ВАИАНТ-1 **/
add_action('pre_get_posts','add_search_atsmih_filter');
function add_search_atsmih_filter($query) {
if ( !is_admin() && $query->is_main_query()) {
if ($query->is_search) {
$query->set('post_type', array( 'post', 'имя_типа' )); // ТИПЫ через запятую
} } }
/** добавление произвольных типов в поиск **/
или этот:
/** добавление произвольных типов в поиск по САЙТУ - ВАИАНТ-2 **/
add_filter('the_search_query', 'add_my_search_all');
function add_my_search_all($query) {
if ($query->is_search) {
$query->set('post_type', array('post', 'page', 'ИМЯ_ТИПА' // через запятую
)); }
return $query;
}
/** добавление произвольных типов в поиск */
чтобы все посты авторов сайта отображались в одном его архиве: и произвольные типы записей, и обычные
Если на сайте пишет несколько авторов, то, перейдя по некой авторской ссылке, мы увидим архив только основного типа записей писателя.
Чтоб заставить Вордпресс выводить абсолютно все записи автора (вперемежку) и post и post_type – пропишем на постоянное место жительства такой пример кода:
/** ОТОБРАЖАТЬ ВЫБОРКУ ВСЕХ ПОСТОВ АВТОРОВ - и из обычных рубрик и кастомных */
add_filter( 'pre_get_posts', 'add_my_author_home_loop' );
function add_my_author_home_loop( $query ) {
if ( is_author() && $query->is_main_query() )
$query->set( 'post_type', array( 'post', 'ИМЯ_ТИПА') ); // через запятую
return $query;
}
/** ОТОБРАЖАТЬ ВЫБОРКУ ВСЕХ ПОСТОВ АВТОРОВ - и из обычных рубрик и кастомных */
чтобы произвольные типы записей отображались на главной странице
…если мы поиск по недрам сайта наладили, то возможно немного порадоваться! однако, через какое-то время заметим, что на главной странице никоим образом записи произвольных типов не хотят отображаться – это потому, как и толковалось выше – из-за того, что, у произвольных записей иной цикл!..
Это дело, возможно, кому-то захочется исправить: чтобы абсолютно все записи сайта (всех типов) “проходили” через главную страницу (если она статическая).
Следует помнить:
коли ПП отрабатывается в ином произвольном цикле WP – то, например, подписчики FeedBurner и пр. подобных рассылок оповещений о них не увидят!
Словом, это кому-то понравится, а кому-то нет!
Для тех, которые желают своими типами оповещать подписчиков: …всего-то нужно добавить такой чудо-код:
/** отображать на главной ВПЕРЕМЕШКУ последние записи ТИПОВ в этом - ТИПЫ попадают в FeedBurner и пр. (т.е в рассылку) feedburner */
add_filter( 'pre_get_posts', 'add_custom_my_home_loop' );
function add_custom_my_home_loop( $query ) {
if ( is_home() && $query->is_main_query() )
$query->set( 'post_type', array( 'post', 'ИМЯ_ТИПА') ); // через запятую укажем типы
return $query;
}
/** отображать на главной ВПЕРЕМЕШКУ последние записи ТИПОВ */
как добавить произвольные типы записей в RSS ленту
…если нужно только то, чтобы записи произвольных типов попадали в rss ленту (т.е чтобы подписчики видели у себя в закладках браузера обновления сайта), но при всём этом не хотите чтобы посты произвольных записей показывались на главной странице (а, следовательно!! подписчики на Feed /FeedBurner/ их не видели на своей почте), добавьте этот код к себе в активный файл функций…
/** добавление произвольных типов в RSS ленту */
add_filter('request', 'add_my_feed_all');
function add_my_feed_all($vars) {
if (isset($vars['feed']) && !isset($vars['post_type']))
$vars['post_type'] = array('post', 'ИМЯ_ТИПА'); // через запятую
return $vars;
}
/** добавление произвольных типов в RSS ленту */
…или так:
/** ДОБАВИМ ТИПЫ запсей в RSS ленту-2 */
add_filter('pre_get_posts', 'add_my_post_types_to_feed');
function add_my_post_types_to_feed( $query ) {
// Выходим если это запрос не фидов
if( ! $query->is_feed || ! $query->is_main_query() )
return;
$query->set( 'post_type', array('post', 'ИМЯ_ТИПА') );
}
/** ДОБАВИМ ТИПЫ запсей в RSS ленту */
В этой инструкции рассказано о том, как настроить вывод отображения количества записей в любом конкретном архиве…
А вот из этой статьи узнаете как кастомизировать (оптимизировать в плане удобства работы с произвольными типами админку)
...А мне остаётся только раскланяться... и пожелать полезной работы в сети
Связка Contact Form 7 с плагином CF7 Google Sheet Connecto (отправим данные из формы связи в таблицы Google)
mihalica.ru !
Скажите пожалуйста, а как сделать в коде случайных записей чтобы по нажатию на ссылку или кнопку выводились несколько случайных постов из конкретной рубрики. Ну то есть например на странице такой текст:
“Посмотреть варианты узоров вязания для конкретной модели”
“Клац” – Нажимаем и нас перекидывает на несколько случайно выбранных узоров от 3х до 20ти. И при каждом нажатии открываются разные (рандомные).
Такая функция очень похожа на онлайн-гадания.
Подскажете?:)
Спасибо!
Здравствуйте, Таня!
У вас уже отрабатывается что-то подобное на сайте..? (желательно взглянуть, чтоб подсказать что-то дельное)
Что имеется в виду? переброс на страницу, описывающую примеры вязания? или просто рандомные ссылки на страницы выскакивали, или картинки узоров?..
Вообще, желательно написать код для подобной функции… или для сайдбара (виджета)… ну, или так как вам нужно…
Спасибо, два дня инет рыл, чтобы найти решение проблемы, которую увидел у себя (не выводились посты автора на произвольном типе записей). А тут еще понял, что и в поиске они не искались.
И вам, Сергей, спасибо за то, что не поленились и поделились мнением)
Михаил, может подскажете еще один ньанс:
если я ищу через поиск и результат выдается и со стандартного типа “запись” и с созданного произвольного “video”, то произвольный в цикле отображается без миниатюры, хотя она установлена и в цикле моего только произвольного типа записей миниатюра отображается.
Вы имеете в виду Результат поиска (лента) выводится без миниатюры? или что…
Да, именно там записи произвольного типа отображаются без миниатюры, хотя если в там попадаются обычные записи, то на них миниатюра есть
Понятно.
Тогда нужно (чтоб убедиться) перепроверить функцию организации вывода цикла произвольных типов на предмет “подтяжки” миниатюры и того, каким образом организованы превью в шаблоне и т.п.
Подобные случаи бывают касаемо пр. типов. Но однозначного решения нет. Нюансы частенько встречаются (смотреть нужно конкретику кода).
А сам Поиск в WP по сути для любых типов одинаков.