Создаем кастомный тип записи (Custom Post Type) Articles с кастомными категориями (Custom Taxonomy) Articles Category.
[vc_row][vc_column][vc_message color=”alert-warning” message_box_color=”alert-warning” icon_type=”pixelicons” icon_pixelicons=”vc_pixel_icon vc_pixel_icon-alert”]Это будет наиболее полезная статья по Custom Post Type[/vc_message][/vc_column][/vc_row]
В моем случае все стандартные записи – это Товары, поэтому Статьи выведем через кастомные записи.
В файле функций functions.php
регистрируем кастомный тип записи Articles:
function wptp_create_post_type() { $labels = array( 'name' => __( 'Articles' ), 'singular_name' => __( 'Articles' ), 'add_new' => __( 'New Article' ), 'add_new_item' => __( 'Add New Article' ), 'edit_item' => __( 'Edit Article' ), 'new_item' => __( 'New Article' ), 'view_item' => __( 'View Article' ), 'search_items' => __( 'Search Articles' ), 'not_found' => __( 'No Articles Found' ), 'not_found_in_trash' => __( 'No Articles found in Trash' ), ); $args = array( 'labels' => $labels, 'has_archive' => true, 'public' => true, 'hierarchical' => false, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail' ), ); register_post_type( 'articles', $args ); } add_action( 'init', 'wptp_create_post_type' );
Если вы хотите, чтобы в кастомных постах выводились стандартные категории, тогда привяжите их к таксономии Категорий:
'taxonomies' => array('category'),
Если для кастомных постов вы создаете еще и кастомные таксономии, то связывать их надо с созданными таксономиями, если брать пример ниже, то это будут articles_category
'taxonomies' => array('articles_category'),
Затем для кастомного типа записи Articles регистрируем таксономии ‘Article Category’, чтобы разные записи могли принадлежать разным категориям.
function wptp_register_taxonomy() { register_taxonomy( 'articles_category', 'articles', array( 'labels' => array( 'name' => 'Article Categories', 'singular_name' => 'Article Category', 'search_items' => 'Search Article Categories', 'all_items' => 'All Article Categories', 'edit_item' => 'Edit Article Categories', 'update_item' => 'Update Article Category', 'add_new_item' => 'Add New Article Category', 'new_item_name' => 'New Article Category Name', 'menu_name' => 'Article Category', ), 'hierarchical' => true, 'sort' => true, 'args' => array( 'orderby' => 'term_order' ), 'show_admin_column' => true ) ); } add_action( 'init', 'wptp_register_taxonomy' );
Для кастомной таксономии можно изменить слаг на более красивый, чтобы он не был articles_category
, но нужно учесть, чтобы таких слдагов больше не было на других страницах или постах, иначе будут проблемы:
'rewrite' => array( 'slug' => 'blog' ),
[vc_row][vc_column][vc_message color=”alert-warning” message_box_color=”alert-warning” icon_type=”pixelicons” icon_pixelicons=”vc_pixel_icon vc_pixel_icon-alert”]При изменении слагов необходимо обновить настройки “Постоянных ссылок” в админке, иначе будете получать 404 ошибку вместо нужной страницы.[/vc_message][/vc_column][/vc_row]
Больше примеров можно найти здесь и здесь. Но привести весь этот код в порядок помогла эта статья, за что автору большая благодарность.
За внешний вид кастомной записи отвечает файл single.php
, но чтобы изменить вид кастомной записи можно создать файл single-{post_type}.php
– в моем случае будет single-articles.php
со своим содержимым.
Теперь нужно вывести кастомные записи на странице. По умолчанию за отображение архива кастомных записей отвечает файл index.php
. Но можно создать файл, который будет отвечать за вывод кастомных записей в своей таксономии.
Вариант 1 – самый правильный. Выводим записи в таксономии так же как и в обычной категории.
Для этого создаем файл taxonomy-{taxonomy}.php
– в моем случае будет taxonomy-articles_category.php
и в нем выводим обычный цикл, как и для стандартных записей в категории:
<div class="container"> <div class="row"> <div class="col-md-12"> <div class="cat-title"><?php single_cat_title(); ?></div> <div class="tax-wrap"> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); get_template_part( 'include/tax-item' ); endwhile; get_template_part('include/pagination'); endif; ?> </div><!-- /tax-wrap --> </div><!-- /col-md-12 --> </div><!-- /row --> </div><!-- /container -->
В файле tax-item.php
выводим данные, которые нам нужно получить из каждой записи, например, заголовок, ссылку на запись, миниатюру и excerpt.
В файле pagination.php
выводим пагинацию вот такого формата.
Цикл не изменяем, пагинация отлично работает. Это самый оптимальный вариант для отображения Кастомных Таксономий.
Вариант 2 – если нет кастомных таксономий, то можно просто получить все кастомные записи в виде Архива
Для этого в шаблоне создаем файл archive-{post_type}.php
– в моем случае будет archive-articles.php
, в котором точно так же как и в таксономии выводим обычный цикл, только вместо заголовка Таксономии выводим имя кастомного типа записи :
<div class="container"> <div class="row"> <div class="col-md-12"> <div class="cat-title"><?php post_type_archive_title(); ?></div> <div class="tax-wrap"> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); get_template_part( 'include/tax-item' ); endwhile; get_template_part('include/pagination'); endif; ?> </div><!-- /tax-wrap --> </div><!-- /col-md-12 --> </div><!-- /row --> </div><!-- /container -->
При этом варианте, если не создана страница архива для кастомной записи, тогда получить список всех кастомных записей можно по прямой ссылке BLOG_URL?post_type={post_type}
или в моем случае http://site.com/articles/
.
Вариант 3. Просто выводим все кастомные записи Articles на странице с заданным шаблоном
<?php $args = array( 'post_type' => 'articles', 'posts_per_page' => -1 ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); get_template_part( 'include/tax-item' ); endwhile; ?>
get_template_part( 'include/tax-item' );
– в файле tax-item.php
я вывожу содержимое записи, которое нужно мне для отображения записей внутри цикла (заголовок, миниатюру, дату, цитату и т.д.)
Этот вариант выводит все записи Articles на странице, не зависимо от таксономий (категорий).
А если нам нужно вывести каждую категорию отдельно со своими новостями, тогда используем первый вариант, описанный выше.
При этом, если вы используете плагин Yoast SEO и используете его хлебные крошки:
<?php if ( function_exists('yoast_breadcrumb') ) { yoast_breadcrumb(' <p id="breadcrumbs">','</p> '); } ?>
Тогда при выборе в настройках плагина таксономии “Articles Category” в “Taxonomy to show in breadcrumbs for post types”, в хлебных крошках вы получите ссылку на категорию, к которой принадлежит Новость, при других вариантах вывода кастомных записей это не получалось сделать.
Комментарии (21) к “Создаем кастомный тип записи (Custom Post Type) с кастомными категориями (Custom Taxonomy)”
Dana
Перед собой ставил задачу создания каталога, поэтому ковырял варез – Gravity Forms. К сожалению Gravity Forms не дает возможности публиковать контент в пользовательских типах, только в типах данных post. Если кто поможет решить проблему – буду рад!
Denis Creative
Я не совсем понял, в чем была суть задачи и какая цель…
Gravity Forms – это, вроде, обычный плагин форм как и Contact Form 7, может для публикации контента лучше подойдет плагин Frontend Post WordPress Plugin?
Александр
Добрый день!
Я создаю без кастомной таксономии, но всё равно шаблон archive-articles.php не цепляется, а выводится посредством index.php
Может еще что-то менять надо?
Александр
разобрался
вот главное
иначе не работает шаблон архивов
Denis Creative
все верно)
Роман
Подскажите пожалуйста, можно ли сделать так, чтобы эти кастомные поля имели в конце префикс .html?
psinka
долго мучался, несколько дней, создавал архив произвольных записей, но 404 ошибка выдавала при переходе…
оказалось, что в плагине, через который создал типы записей, напротив пункта Archive был параметр False…
так что внимательнее!
Слава
Привет, такой вопрос. Если я хочу вывести все записи произвольного типа, но помимо них на странице вывода должен присутствовать другой контент, который должен редактироваться с админки (именно для этой страницы), как это лучше сделать? Если через архив – тогда нет места для редактирования контента, но все в порядке и с урлами и с хлебными крошками. Если через шаблон страницы – все отлично с контентом: все редактируется на одной странице, но возникает куча проблем: кривые крошки, перенаправления, дубли страниц и каша с урлами. Получается так или иначе нужно что-то костылять. Каким образом лучше и правильнее все это сделать? (например когда есть несколько типов записи со своми таксономиями). Буду благодарен за ответ.
Denis Creative
Если я правильно понял вопрос, то можно ведь в таксономии вывести
description
с помощью кода<?php echo category_description(); ?>
и в нем создать контент, который можно будет редактировать.Aндрей
Здравствуйте. Как вывести записи (произвольный тип), которые относятся определенной категории? (При клике на категорию вывести список записей этой категории).
Aндрей
Не категории а подкатегории.
Denis Creative
Использовать код из Варианта 1
Игорь
Чет не выводится – ка в списке категорий , так и сама сингле запись?
Андрей
Здравствуйте. Вывел произвольные рубрики первым способом –
Но теперь при переходе в произвольную запись – хлебные крошки не выводят название этой рубрики (таксономии).
Breadcrumb NavXT (рубрика-шаблон):
%htitle%
Андрей
Андрей
Андрей
Почему на странице таксономии крошки отображают название (этой произвольной рубрики), а при переходе на произвольную запись – название рубрики в крошках отсутствует?
Андрей
Проблему решил (в настройках плагина хлебных крошек).
Игорь
Сделал таксономию articles_category и в ее добовляю записи – но на сайте НЕ выводит – “Страница ненайдена”?
Denis Creative
Много вариантов, проверяйте каждый этап создания таксономий.
Саша
Создал шаблон таксономии taxonomy-catalog.php , как в ней вывести все записи?