Custom post type ui


Начиная с версии 2.9 WordPress предоставил возможность использования произвольных типов записей. Теперь же с версии 3.0 всё стало еще приятнее с опцией создания панелей для ваших произвольных типов записей. В этой статье мы покажем вам как внедрить Произвольные Типы записей на ваш сайт на WordPress.

Создание произвольных типов записей — используем Плагин

На сегодняшний день в версии 3.0 WordPress нет встроенного интерфейса для создания произвольных типов записей. Есть только два способа, доступных для создания произвольных типов записей: плагины или хард-кодинг темы в файле functions.php. Сначала давайте рассмотрим реализацию задуманного с использованием плагинов.

Custom Post Type UI

cptui[1]

Custom Post Type UI — это плагин, разработанный Brad Williams, который позволяет вам с легкостью создавать произвольные типы записей и таксономии. Одной из самых примечательных возможностей этого плагина является то, что он генерирует код для создания произвольных типов записей, которые в последующем можно вставить в файл functions.php темы, а из минусов то, что невозможно использовать таксономии для всех ваших типов записей.


generatecode[1]

В панели Custom Post Type UI кликните на “Add New”.

addnewsidebar[1]

Далее вам необходимо проделать несколько настроек.

  • “Post Type Name” — это то, что будет использоваться WordPress для запросов на все записи из этого post_type.
  • “Label” — то, что будет отображаться в сайдбаре вашей Консоли, по типу стандартного меню «Записи».
  • Если раскрыть “View Advanced Options”, то можно увидеть несколько дополнительных настроек. Большинство из них интуитивно понятны, например “Public” и “Show UI”. Первая при переключении ее в True позволит вывести меню произвольного типа записи в сайдбар, а вторая (Show UI) при значении True создает панель меню.
  • “Rewrite” — то, что позволит произвольным типам записей использовать SEO Friendly WordPress URL (постоянные ссылки, ЧПУ).
  • В “Custom Rewrite Slug” вы указываете все, что вам угодно. WordPress будет использовать указанный slug для генерации постоянных ссылок. Поэтому если у нас есть домен example.com и slug — “movies”, то ваша ссылка на произвольный тип записи будет выглядеть примерно так example.com/movies.

  • Функция WordPress “Query Var” позволяет вам выполнять запросы к вашим новым типам записей. Если мы возьмем пример, приведенный выше, то чтобы получить доступ к записи с заголовком, My First Movie Post, который находится в post_type Movies, мы можем ввести example.com/?movies=my-first-movie-post. Посему переменная запроса выглядит так: ?posttypename

И, наконец, вы можете выбрать различные фичи, которые должны поддерживаться вашим произвольным типом записей, например миниатюры и цитаты.

addnewdisplay[1]

Создание произвольных типов записей — используем файл Functions.php

functions[1]

Если вы предпочтете создавать произвольные типы записей без плагинов, то просто добавьте следующий код в файл functions.php вашей темы:

  // Создаем тип записей Movies   register_post_type('movies', array(  'label' => 'Movies',  'public' => true,  'show_ui' => true,  'capability_type' => 'post',  'hierarchical' => false,  'rewrite' => array('slug' => 'movies'),  'query_var' => true,  'supports' => array(  'title',  'editor',  'excerpt',  'trackbacks',  'custom-fields',  'comments',  'revisions',  'thumbnail',  'author',  'page-attributes',)  ) );  

Давайте проанализируем код.


register_post_type( $post_type, $args ): Эта функция принимает два параметра, $post_type или название типа записи, и $args, массив параметров.

label: Имя, задаваемое типу записи, которое будет отображаться в сайдбаре административной панели сайта.

show_ui: true/false. Отображает или скрывает дефолтный интерфейс для управления этим типом записей.

capability_type: По-умолчанию: post. Тип записи для проверки возможностей чтения, редактирования и удаления.

hierarchical: Является ли запись иерархической.

rewrite: true/false. По-умолчанию: true . Если параметр slug указан, то имя slug добавляется перед записью.

query_var: true/false Устанавливает переменную для запроса к произвольному типу записи.

supports: По-умолчанию: title и author . Устанавливает различные фичи, которые будут поддерживаться типом записи.

Посетите WordPress Codex для более подробной информации по register_post_type().

выводим произвольные типы записей

Для вывода записей из вашего произвольного типа необходимо добавить следующий код в цикл. Измените “name” на имя вашего типа записей. Примечание: вам не нужно добавлять ваши произвольные типы записей в ваш файл index.php. Можно создать пользовательскую страницу в WordPress и там выполнить следующий запрос внутри цикла.


  $query = new WP_Query( 'post_type=name' );  

Для вывода записей более чем из одного типа записей, измените следующий код на код ниже. Измените movies на имя вашего произвольного типа.

  $query = new WP_Query( array(  	'post_type' => array( 'post', 'movies' )  ) );  

Код выше выведет все стандартные записи блога и из произвольного типа movies.

Вот и все. Надеемся, что статья окажется вам полезной.

По всем вопросам и отзывам просьба писать в комментарии ниже.

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

wpincode.com

О записях в WordPress: где хранятся в базе данных, и как их получить

Абсолютно все записи в WordPress, про которые чуть ниже, хранятся в одной таблице: wp_posts. Метаданные постов, например, данные из метабоксов Yoast SEO, хранятся в таблице wp_postmeta


.

Приведу пример, как получить 10 записей типа post (стандартные Записи в панели администратора).
В общих чертах, данные особо запрашивать не надо. В шаблонах они уже предустановлены, например, в single.php данные по записи уже доступны для обработки в цикле

if ( have_posts() ) {   while ( have_posts() ) { the_post();   // Тут используем данные из цикла, такие как the_title() и т.п.   }  }  

Если данные нужно получить где-то вне цикла или шаблона, используется запрос WP_Query

$args = array(  	'post_type' => 'post', // Тип поста: page, attachment, ...  	'posts_per_page' => 10, // 10 записей за раз  );  $p = get_posts( $args );    // Данные можно раскрыть в цикле  if ( !empty( $p ) ) {  	foreach ( $p as $post ) {  		setup_postdata( $post );  		?>  		<a href="<?= the_permalink() ?>"><?= the_title() ?></a>  		<?php  	} wp_reset_postdata();  }  

Данные можно получить посредством SQL запроса:

global $wpdb;  $query = "SELECT * FROM {$wpdb -> posts} WHERE post_type = 'post' LIMIT 10";  $p = $wpdb -> get_results( $query );  exit( print_r( $p ) ); // в $p теперь массив с данными о постах  

Все три способа выше дадут одинаковый результат на выходе.

Предустановленные типы записей в WordPress: post, page, attachment, revision, nav_menu_item

Как вы, наверное, знаете, Worpdress имеет предустановленные типы контента: записи (post


) и страницы (page). Есть ещё несколько предустановленных типов (attachment — аттачменты: изображения, аудио, видео; revision — ревизии записей, по сути, черновики; nav_menu_item — элементы меню), но они больше служебные и вспомогательные. Далее речь о них.

Записи или посты (post)

Самая используемая единица из всех типов, что есть в WordPress — Записи (они же посты, post). Используется в роли постов блога и тому подобного. Имеет 2 предустановленных таксономии: рубрики, они же категории (category) и метки, они же теги (post_tag).
Таксономии служат для сортировки и упорядочивания записей.
Рубрики отличаются от меток тем, что имеют древовидную структуру (могут быть вложенными друг в друга).
Метки являются независимыми друг от друга единицами и этим чем-то похожи на Записи.
Также, по умолчанию, из записей формируется RSS лента сайта на Вордпрессе.

Для Записей используются следующие файлы шаблонов (в порядке приоритета):

  1. single-post.php
  2. single.php
  3. singular.php
  4. index.php

Файлы шаблонов ищутся сверху вниз по списку в порядке приоритета. Если файл шаблона найден в теме, используется он, а поиск прекращается.

Страницы (page)

Страницы используются, в основном, в роли служебных страниц, посадочных страниц — лендингов, сборника энциклопедии и тому подобного. Имеют древовидную иерархию, то есть могут быть вложенными друг в друга, что отразится в адресе конечной страницы (ярлыки родительских будут присутствовать в цепочке URL), и в этой роли имеется возможность выставить им приоритет в сортировке.
Чтобы сделать лендинг, вы можете пойти двумя путями:

Создаём специальный шаблон страницы (page)

Где-нибудь внутри темы в корне или её поддиректории создать файл с произвольным названием и расширением php, например, landing.php. Внутри вы можете разместить совершенно любой шаблон, который может быть абсолютно не похож на другие страницы сайта. Но главное, это поместить вот такой код в начало файла:

<?php  /* Template Name: Наш уникальный лендинг */  

Template Name — это специальная метка, которая говорит WordPress о том, что этот файл — специальный шаблон.
Теперь при создании и редактировании любой страницы (page) посмотрите в блоке справа с названием Атрибуты страницы, в нём в разделе Шаблон вы можете выбрать наш уникальный лендинг.

Для Страниц (Page) используется следующая иерархия шаблонов. Как и с Записями, указываю в порядке приоритета:


  1. {шаблон}.php
  2. page-{ярлык_страницы}.php
  3. page-{ID_страницы}
  4. page.php
  5. singular.php
  6. index.php

Прикрепления, вложения или аттачменты (attachment)

Служебный тип, предназначенный для хранения информации о файлах (изображениях, аудио, видео и тому подобных), которые загружались через загрузчик в стандартном редакторе WordPress при редактировании Записи, Страницы или подобного: размер, вес, описание, к какому посту или странице прикреплены, и тому подобное.

Получить вложения для последующей манипуляции над ними можно с помощью следующего кода:

$args = array(  	'post_type' => 'attachment', // Тип поста: attachment  	'post_status' => 'inherit', // По умолчанию "publish", а с ним вложения не получить, поэтому указываем специальный статус вложения "inherit"  );  $p = get_posts( $args );  exit( print_r( $p ) ); // На выходе будем иметь массив с вложениями  

Иерархия шаблонов для аттачментов:

  1. {mime-тип}.php
  2. {mime-подтип}.php
  3. {mime-тип-подтип}.php
  4. attachment.php
  5. single.php
  6. singular.php
  7. index.php

Редакции, черновики или ревизии (revision)

Редакции, они же Ревизии — это версии черновиков записей, которые создаются автоматически, пока вы пишете статью в административной панели Вордпресса или сохраняете статью без фактической её публикации.
В процессе написания, для каждой статьи по умолчанию сохраняется каждая версия черновика. Можно сравнить две разные версии, и к нужной можно откатиться назад.
Хранить помногу версий одной и той же статьи — довольно накладно и часто бессмысленно (хотя, наверное, правильнее было бы оставлять всё по умолчанию, регулярно подчищая старые редакции с помощью плагина, например WP Optimize), поэтому число сохраняемых версий Ревизий можно изменить с помощью 2 вариантов:

  1. Использовать фильтр wp_revisions_to_keep
  2. Прописать в wp-config.php
    //Отключаем ревизии до минимально возможного значения  define( 'WP_POST_REVISIONS', 0 );

    Возможные значения:

    • true или -1: сохраняет каждую версию черновика. Вариант по умолчанию
    • false или 0: отключает сохранение черновиков, кроме 1 автосохранения
    • Целое число больше нуля: сохраняется указанное число версий черновиков + 1 автосохранение. Старые версии, не укладывающиеся в указанное число, автоматически удаляются

Элементы навигационного меню (nav_menu_item)

Навигационное меню (nav_menu_item) — это тип записей, который хранит информацию об единице навигации в WordPress. Первый, и пока единственный тип записи, который используется не как остальные типы записей, данные для работы и отображения на сайте получают свои отдельные функции.
Также, навигационные меню по умолчанию не включены. Чтобы их включить, нужно объявить об их поддержке в functions.php:

  1. Прописать
    add_theme_support( 'menus' );
  2. Или зарегистрировать место под меню с помощью register_nav_menu(), тогда поддержка меню включится автоматически

Для получения данных пользуйтесь wp_nav_menu(), потому что WP_Query не будет работать, и это отличительная особенность типа постов nav_menu_item

Пользовательский Произвольный тип записи (Custom Post Type, CPT WordPress)

Вот мы и подошли к главному — тому инструменту, который позволяет расширить стандартный блоговый функционал WordPress до бесконечных возможностей: пользовательский произвольный тип записи.
Самый простой пример, как можно зарегистрировать наш новый тип записи sheensay_product

add_action( 'init', 'sheensay_post_type' );    function sheensay_post_type() {  	register_post_type( 'sheensay_product', array(  		'labels' => array(  			'name' => 'Продукция',  			'singular_name' => 'Продукцию',  		),  		'public' => true, // тип записи открыт для поиска и тому подобного  		'has_archive' => true, // Включаем страницы архивов  		'supports' => array( 'title', 'editor', 'thumbnail', 'comments' ), // Включаем поддержку заголовка, редактора, миниатюры, комментариев  			)  	);  }  

Здесь sheensay_product — это название нового типа записей. Оно не должно конфликтовать с другими в системе, об этом подробнее ниже.
Также, в этом варианте оно служит ярлыком этого типа записей, то есть присутствует в URL. Если же хотите указать другой ярлык, например продукция, делайте как на примере ниже

add_action( 'init', 'sheensay_post_type' );    function sheensay_post_type() {  	register_post_type( 'sheensay_product', array(  		'labels' => array(  			'name' => 'Продукция',  			'singular_name' => 'Продукцию',  		),  		'public' => true,  		'rewrite' => array( 'slug' => 'продукция' ), // Тут определяется ярлык Custom Post Type  		'has_archive' => true,  		'supports' => array( 'title', 'editor', 'thumbnail' ),  			)  	);  }  

Как правильно подобрать название нового типа записи

В WordPress зарезервированы следующие названия, которые нельзя использовать в качестве имени нового типа записи:

  • post
  • page
  • attachment
  • revision
  • nav_menu_item
  • action
  • theme
  • order

Также, стоит воздержаться от использования префикса wp_в начале названия, так как, возможно, это вызовет конфликты с будущими версиями ядра WordPress.
Лучше всего, если вы будете предварять названия произвольными префиксами, связанными с названием вашего сайта, продукта или бренда, например sheensay_product, тогда гарантированно избежите потенциальных конфликтов

Как сделать произвольную таксономию

Произвольные типы записей могут использовать таксономии из записей, например, рубрики (категории) или метки (теги), но можно, чтобы таксономии были свои.

add_action( 'init', 'sheensay_post_type' );    function sheensay_post_type() {    		// Регистрируем таксономию  		register_taxonomy(  				'sheensay_product_type', 'sheensay_product', array(  			'label' => 'Типы',  			'hierarchical' => true, // Если TRUE, таксономия будет аналогом рубрик (категорий). Если FALSE (по умолчанию), то таксономия станет аналогом меток (тегов).  			'rewrite' => array( 'slug' => 'тип-продукции' ),  				)  		);    	// Регистрируем произвольный тип записи (Custom Post Type)  	register_post_type( 'sheensay_product', array(  		'labels' => array(  			'name' => 'Продукция',  			'singular_name' => 'Продукцию',  		),  		'public' => true,  		'rewrite' => array( 'slug' => 'продукция' ), // Тут определяется ярлык CPT  		'has_archive' => true,  		'supports' => array( 'title', 'editor', 'thumbnail' ), // Включаем поддержку заголовка, редактора, миниатюры  			)  	);  }  

Шаблоны для произвольных типов постов

Всё зависит от того, какого рода информация отображается. Вариантов может быть 3: шаблон конкретной записи, шаблон архивов записей и шаблон таксономий

Шаблон страницы записи

Перечисляются в порядке приоритета

  1. single-{тип_поста}.php
  2. single.php
  3. index.php

{тип_поста} в нашем случае, здесь и далее — это sheensay_product

Шаблон архива записей

  1. archive-{тип_поста}.php
  2. archive.php
  3. index.php

Шаблон произвольной таксономии

  1. taxonomy-{имя_таксономии}-{имя_термина}.php
  2. taxonomy-{имя_таксономии}.php
  3. taxonomy.php
  4. archive.php
  5. index.php

Здесь имя_таксономии — это sheensay_product_type, а имя_термина — это ярлык той таксономии, что вы создадите в админке.

Как получить данные произвольного типа записей (Custom Post Type WordPress) и отобразить на сайте

Получить данные произвольного типа записей (Custom Post Type) в WordPress для отображения на сайте можно теми же способами, что и обычные Записи и Страницы

$args = array(  	'post_type' => 'sheensay_product', // Указываем наш новый тип записи  	'posts_per_page' => 10,  );  $p = get_posts( $args );  foreach ( $p as $post ) {  	setup_postdata( $post );  	?>  	<a href="<?= the_permalink() ?>"><?= the_title() ?></a><br />  <?php } wp_reset_postdata(); ?>  

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

// Подключаем к стандартным 'post' и 'page' наш 'sheensay_product'  add_action( 'pre_get_posts', 'add_sheensay_product_in_main_query' );    function add_sheensay_product_in_main_query( $query ) {  	if ( is_archive() && $query -> is_main_query() )  		$query -> set( 'post_type', array( 'post', 'page', 'sheensay_product' ) );  	return $query;  }  

Готовый класс для создания произвольного типа записей с произвольной таксономией

Ниже представлен класс, с помощью которого вы сможете зарегистрировать любой произвольный тип записей с собственной таксономией, а URL будет иметь вид
http://example.com/продукция/тип/продукт

Чтобы URL формировался, вы должны перейти в настройки постоянных ссылок /wp-admin/options-permalink.php и установить любой отличный от простого вид общих настроек

Ниже сам код класса. Вы можете не вносить в него никаких изменений, а поменять ярлык типа записи можно в самом конце в строке new Sheensay_Product( 'продукция' );
Сам код пишется в MU Plugin или в functions.php. Первый вариант предпочтительнее, так как в этом случае, вы не потеряете доступа к контенту нового типа записей при смене активной темы.

<?php    /**   * Класс для регистрации и работы произвольного типа записи   *    * Тип URL: /post_type/category/post/   *    * @link https://sheensay.ru/?p=1713   *   */  final class Sheensay_Product {    	// Ярлык произвольного типа записи по умолчанию  	private $post_type = 'продукция';    	function __construct( $post_type = "" ) {    		// Переопределяем значение ярлыка по умолчанию  		if ( $post_type )  			$this -> post_type = $post_type;    		/*  		 * Регистрируем Custom Post Type  		 */  		add_action( 'init', array( $this, 'sheensay_cpt_product' ) );    		/*  		 * Фильтруем URL  		 */  		add_filter( 'post_type_link', array( $this, 'product_permalink_structure' ), 10, 2 );    		/*  		 * Чтобы работала пагинация  		 */  		add_action( 'generate_rewrite_rules', array( $this, 'fix_product_category_pagination' ) );  	}    	function sheensay_cpt_product() {    		/*  		 * Регистрируем произвольную таксономию к новому типу записей  		 */  		register_taxonomy(  				'sheensay_product_type', 'sheensay_product', array(  			'label' => 'Типы',  			'hierarchical' => true,  			'query_var' => true,  			'rewrite' => array( 'slug' => $this -> post_type ),  				)  		);  		  		/*  		 * Регистрируем новый тип записи  		 */  		$labels = array(  			'name' => 'Продукция', // Основное название  			'singular_name' => 'Продукцию', // Добавить  			'add_new' => 'Добавить новую', // Имя ссылки на новую запись в сайдбаре   			'add_new_item' => 'Добавить новую продукцию', // Заголовок в редакторе при добавлении новой записи  			  		);    		$args = array(  			'labels' => $labels,  			'public' => true,  			'publicly_queryable' => true,  			'show_ui' => true,  			'query_var' => true,  			'capability_type' => 'post',  			'hierarchical' => false,  			'menu_position' => null,  			'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),  			'rewrite' => array(  				'slug' => $this -> post_type . '/%sheensay_product_type%',  				'with_front' => false,  			),  			'has_archive' => $this -> post_type,  		);    		register_post_type( 'sheensay_product', $args );      		if ( current_user_can( 'manage_options' ) )  		// Вот с этой функцией осторожней. Она сбрасывает все правила определения URL. Лучше её закомментировать после завершения всех работ  			flush_rewrite_rules();  	}    	function product_permalink_structure( $post_link, $post ) {  		if ( FALSE !== strpos( $post_link, '%sheensay_product_type%' ) ) {  			$product_type_term = get_the_terms( $post -> ID, 'sheensay_product_type' );  			if ( !empty( $product_type_term ) )  				$post_link = str_replace( '%sheensay_product_type%', $product_type_term[0] -> slug, $post_link );  		}  		return $post_link;  	}    	function fix_product_category_pagination( $wp_rewrite ) {  		unset( $wp_rewrite -> rules[ $this -> post_type . '/([^/]+)/page/?([0-9]{1,})/?$'] );  		$wp_rewrite -> rules = array(  			$this -> post_type . '/?$' => $wp_rewrite -> index . '?post_type=sheensay_product',  			$this -> post_type . '/page/?([0-9]{1,})/?$' => $wp_rewrite -> index . '?post_type=sheensay_product&paged=' . $wp_rewrite -> preg_index( 1 ),  			$this -> post_type. '/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite -> index . '?sheensay_product_type=' . $wp_rewrite -> preg_index( 1 ) . '&paged=' . $wp_rewrite -> preg_index( 2 ),  				) + $wp_rewrite -> rules;  	}    }    /*   * Запускаем класс   * В скобках можно определить название ярлыка типа записи   */  new Sheensay_Product( 'продукция' );    

Теперь в админке вы можете зарегистрировать новую продукцию и их типы

Создание произвольного типа записей с помощью плагина Custom Post Type UI

Чтобы не писать код вручную, вы можете воспользоваться готовым плагином. Он довольно популярен, и на момент написания статьи имеет 500 тысяч скачиваний из официального репозитория WordPress.org

Скачать плагин Custom Post Type UI из официального репозитория WordPress.org

Иерархия шаблонов темы в WordPress

Ниже иллюстрация иерархии шаблонов, то есть как ищутся и подбираются подходящие шаблоны (template) внутри темы (кликабельно):

sheensay.ru

Что такое произвольные типы записей в WordPress?

Весь контент сайта “движок” хранит и выводит в виде так называемых записей, каждая из которых относится к определенному типу. Например, Страница относится к типу записей “page”, а блоговый пост — “post”. Это стандартные типы данных WordPress, которые уже присутствуют в свежеустановленной копии “движка”. Произвольный же тип — это сгенерированный вручную новый тип контента. В момент его объявления в системе будет зарегистрирован новый тип записей. Приведем примеры случаев, когда необходимо создавать произвольный тип данных:

  • Books (книги),
  • Organizations (организации),
  • People (люди),
  • Products (продукты),
  • Places (места) и др.

Зачем создавать свой тип записей WordPress?

Создание своего типа записей позволит вводить и показывать на сайте контент нужным, специфичным для этой информации, образом. Кроме того, собственный тип данных позволит хранить в базе данных WordPress любой тип информации.

В каких случаях стоит создавать произвольный тип записей?

Обычно создание произвольного типа записей необходимо для контента, вывод которого не вписывается в рамки встроенных типов (Записей и Страниц). Более того, новый тип позволит добавить к записям нужные опции (например, имена, адреса, телефонные номера и пр.)

Плагины для работы с произвольными типами записей

Произвольные (нестандартные) типы записей в WordPress можно создать двумя путями: с помощью плагина или вручную. Последний способ является наиболее трудоемким, так как предусматривает хорошую подготовленность пользователя в языках программирования. Мы же рассмотрим более легкий вариант, решающий ту же задачу, но более простым методом — через админ-интерфейс, не требуя каких-либо знаний в программировании. Для этого разработаны и успешно применяются специальные плагины. Познакомимся с наиболее популярными из них.

Плагин Custom Post Type UI

Дополнение Custom Post Type UI обеспечивает пользователю простой и понятный интерфейс для создания и управления произвольными типами данных в WordPress. Среди основных его преимуществ можно выделить:

  • возможность добавления произвольных типов к встроенным или другим созданным вручную;
  • поддержка разного рода опций редактора записей;
  • наличие отдельного списка типов записей, созданных через плагин.

Плагин Custom Post Type UI также имеет негативные стороны, особенно для начинающего WordPress-пользователя:

  • созданные через плагин типы записей придется вручную добавлять в темы;
  • довольно скудное описание возможностей;
  • отсутствие возможности добавления произвольных полей.

Плагин Toolset Types

Плагин Toolset Types, в отличии от предыдущего, позволит Вам добавить произвольные поля и таксономии (категоризацию). Среди его основных возможностей:

  • поддержка расширенных возможностей произвольных типов;
  • возможность управления доступом к полям, которые могут редактировать и просматривать пользователи;
  • наличие всплывающих подсказок по сложным возможностям;
  • возможность создания отношений “родительский — дочерний элементы” между любыми типами;
  • присутствие возможности экспорта/импорта для данных плагина;
  • мультиязычность;
  • возможность повторения всех полей.

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

Плагин Custom Post Types and Custom Fields creator – WCK

WCK Custom Post Type Creator — очередной плагин для создания и управления произвольными типами записей WordPress, обеспечивающий удобный и понятный интерфейс. Плюсы дополнения:

  • простота и понятность интерфейса;
  • возможность создания и поддержки произвольных типов записей, таксономий и произвольных полей, а также мета-полей для записей, страниц и произвольных типов записей;
  • наличие краткого руководства для начала работы.

Плагин Custom Post Type Maker

Custom Post Type Maker – WordPress-плагин, позволяющий создавать произвольные типы записей и таксономии с максимальным удобством для пользователя. Решение полностью интегрировано с WordPress API и обеспечивает поддержку практически всех параметров Custom Post Type API. Имеет ряд преимуществ:

  • наличие продуманного интерфейса с отдельными секциями Post Types и Taxonomies;
  • присутствие интерфейса для управления произвольными типами записей, такими как обычные записи и страницы;
  • предоставляет все необходимые возможности для создания и управления произвольными типами записей;
  • обеспечивает возможность задавать практически все параметры Custom Post Type API.

Среди недостатков плагина можно выделить отсутствие возможности вывода произвольных типов записей и таксономий.

Плагин CPT-onomies

CPT-onomies — плагин для создания произвольных типов записей, совместимый с мультисайтами в WordPress. Позволяет создавать мощные таксономии и отношения между записями. Среди преимуществ можно выделить:

  • возможность использования таксономий;
  • возможность создания отношений между записями;
  • поддержка регистрации других произвольных типов записей, создаваемых плагинами и темами WordPress;
  • полная поддержка мультисайтов. Есть возможность регистрации произвольных типов записей и таксономий по всей сети или только для определенных сайтов.

Плагин давно не обновлялся, поэтому не так популярен между WordPress-пользователями.

Плагин MB Custom Post Type

Плагин MB Custom Post Type позволяет создавать произвольные типы записей и таксономии, обеспечивая легкое управление ими, благодаря понятному интерфейсу. Среди плюсов дополнения можно выделить следующие:

  • поддержка всех аргументов типа post;
  • удобство в использовании;
  • поддержка режима live-редактирования, который автоматически заполняет все необходимые метки;
  • поддержка импорта/экспорта для созданных типов записей;
  • возможность расширения функционала при помощи аддонов.

Для работы MB Custom Post Type необходима установка плагина Meta Box.

Плагин Custom Post Type Generator

Custom Post Type Generator — простое и понятное решение, позволяющее генерировать произвольные типы записей из консоли WordPress. Плагин обеспечивает:

  • простой интерфейс;
  • возможность генерации PHP-кода для включения произвольных типов записей и таксономий в темы и плагины;
  • отдельный вывод произвольных типов записей, встроенных типов и типов, поддерживаемых темой.

Недостатком Custom Post Type Generator является отсутствие вывода зарегистрированных типов записей и таксономий в списке редактируемых объектов.

Плагин Pods — Custom Content Types and Fields

С помощью плагина Pods Вы сможете создавать практически любой тип контента вне зависимости от его сложности. Благодаря удобному интерфейсу, можно легко управлять произвольными полями и типами контента. Преимущества решения:

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

Единственным минусом Pods является сложность для начинающего WordPress-пользователя, учитывая наличие подробной документации.

wpschool.ru

Кастомные типы записи в WordPress

Новая установка WordPress содержит определённые типы стандартных типов записей, страниц, вложений, ссылок, и т.д. Однако, кастомные типы записей, как и дополнительные типы контента, несут в себе разные типы информации.

К примеру, если вы ведёте спортивный веб-сайт, вы обязательно захотите отделить такой тип записи как Обзор. А портал о еде нуждается в таких кастомных типах записей как Рестораны, Блюда, Сервис, Рецепты, и т.д.

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

Как создать кастомные типы записей?

Есть два способа создать Custom Post Type (CPT) в WordPress: использовать код или плагины. Если вы разработчик, то вы можете создать их вручную, написав код. Но если вы новичок, то можете использовать специальные плагины, о которых мы расскажем ниже. Есть множество WordPress плагинов, которые помогут вам в этом. Для вас мы составили список лучших из них:

1. Custom Post Type UI

Топ-4 плагина для создания Кастомных Типов Записей в WordPress» />

Custom Post Type UI – это полнофункциональный бесплатный плагин для постройки CPT и таксономии. Он предлагает отлично интегрированную консоль, где вы можете управлять всеми параметрами довольно быстро. Он позволяет вам создавать и редактировать типы записей вашего веб-сайта.

Этот плагин предлагает расширенную функциональность для маркировки типов записей. С установленным Custom Post Type UI вы можете импортировать кастомные записи, которые размещены на других сайтах. А также вы можете экспортировать ваш CPT.

С обширной пользовательской базой и более 300 000 активных установок, плагин обеспечивает чёткий интерфейс для использования пользовательских типов записей и таксономии в WordPress.

Он также предлагает премиум версию Custom Post Type UI Extended. Премиум версия предоставляет множество изысканных функций, которые сделают отображение пользовательских типов данных очень простым. Расширенная версия стоит $19 и достойна вашего внимания.

2. Toolset Types

Топ-4 плагина для создания Кастомных Типов Записей в WordPress» />

Toolset Types – это ещё один бесплатный плагин с 200 000+ активных установок. Он предлагает комплексное решение для добавления типов контента, кастомных полей для контента и пользователей, а также таксономию. Его функция контроля доступа решает, что пользователи могут видеть или редактировать.

Types включает в себя встроенный CSS редактор, который позволит вам создавать кастомные поля с лёгкостью. В кастомных полях пользователь найдёт широкий перечень параметров, как однострочный текст, чекбокс, электронную почту, номер телефона и многое другое.

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

3. Easy Content Types

Топ-4 плагина для создания Кастомных Типов Записей в WordPress» />

Если вы ищите премиум плагин, то вам может понравиться Easy Content Types от ThemeIsle. Его создал Pippin Williamson, разработчик Easy Digital Downloads, а потом он был выкуплен ThemeIsle.

Без написания и строчки кода, плагин создаёт кастомные типы записей, таксономии и метабоксы всего за пару минут. Его консоль имеет интуитивный интерфейс, который расскажет всё о плагине и его функциях. Новые CPT создаются через функцию drag n drop. Вы также можете экспортировать кастомные типы записей на другие веб-сайты.

Плагин отлично задокументирован, вы можете найди помощь и пояснение для каждого поля ввода данных. Он управляет всеми атрибутами и вариантами поддержки. На странице настройки вы можете изменить параметры отображения новых кастомных типов записей. Easy Content Types доступен в 3 разных версиях. $39 за один сайт, $67 за 3 сайта и $93 за неограниченное количество сайтов.

4. CustomPress

Топ-4 плагина для создания Кастомных Типов Записей в WordPress» />

CustomPress – это гибкий WordPress плагин для управления кастомными типами записей. Вы можете не только добавить типы записей, но и кастомные поля, такие как текст-боксы, кнопки переключателя, выпадающее меню и чекбоксы. Все эти поля красиво стилизованны и имеют современный интерфейс.

Плагин поддерживает интеграцию шорткодов, и вы можете добавлять любое количество меток полей. CustomPress принадлежит к продуктам WPMU Dev и отлично работает с любой темой WordPress. Вы можете также экспортировать типы записей на другие веб-сайты.

hostenko.com

Здравствуйте, столкнулся с такой проблемой. У меня на сайте есть новый тип записи «portfolio» созданный через хук register_post_type(). Так вот к данным записям никак не получается добавить генерацию rss feed.

Пытался сделать это с помощью фильтра, но и он не сработал:

//добавление произвольных типов в RSS ленту start
function wph_feed_all($vars) {
if (isset($vars[‘feed’]) && !isset($vars[‘post_type’]))
$vars[‘post_type’] = array(‘post’, ‘portfolio’);
return $vars;
}
add_filter(‘request’, ‘wph_feed_all’);
//добавление произвольных типов в RSS ленту end

Может подскажете в каком направлении копать решение данной проблемы? Ну или подскажете само решение…

Ну и решение, которое было у вас на форуме тоже не подошло(

add_filter(‘pre_get_posts’, ‘add_new_post_types_to_feed’);
function add_new_post_types_to_feed( $query ) {
// Выходим если это запрос не фидов
if( ! $query->is_feed || ! $query->is_main_query() )
return;

$query->set( ‘post_type’, array(‘post’, ‘portfolio’, ‘page’));
}

Ну и на всякий случай приведу сам код, который отвечает за добавление типа записи.

 /* Portfolio */ function my_post_type_portfolio() { 	register_post_type( 'portfolio', 		array( 			'label' => theme_locals("portfolio"), 			'singular_label' => theme_locals("portfolio"), 			'_builtin' => false, 			'public' => true, 			'show_ui' => true, 			'show_in_nav_menus' => true, 			'hierarchical' => true, 			'capability_type' => 'page', 			'menu_icon' => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-portfolio' : PARENT_URL . '/includes/images/icon_portfolio.png', 			'rewrite' => array( 										'slug' => 'portfolio-view', 										'with_front' => FALSE, 									), 			'supports' => array( 								'title', 								'editor', 								'thumbnail', 								'excerpt', 								'comments', 							) 		) 	); 	register_taxonomy( 		'portfolio_category', 		'portfolio', 		array( 			'hierarchical' => true, 			'label' => theme_locals("categories"), 			'singular_name' => theme_locals("category"), 			'rewrite' => true, 			'query_var' => true 		) 	); 	register_taxonomy( 		'portfolio_tag', 		'portfolio', 		array( 			'hierarchical' => false, 			'label' => theme_locals("tags"), 			'singular_name' => theme_locals("tag"), 			'rewrite' => true, 			'query_var' => true 		) 	); } add_action('init', 'my_post_type_portfolio'); 

wp-kama.ru

Notable new features

Individual post type and taxonomy output for the “Get Code” area

In version 1.1.x and earlier, the “Get Code” feature allowed you to move your registered types and taxonomies to external locations. This output provided a paste-ready block of code for use in custom plugins or your theme’s functions.php. The only drawback was that it was always all or nothing. In version 1.2.0, there is now output for individual post types and taxonomies as well.

Support for adding post types and taxonomies to the WordPress REST API

In WordPress 4.4, the core developers added the REST API infrastructure. In Custom Post Type UI 1.2.0, we added the ability to add REST API support to your post types and taxonomies. If you are unfamiliar with the WP REST API, or need a refresher, check out Ryan‘s WP REST API Overview once done here.

Template hierarchy references in the Registered Post Types and Taxonomies area

When you are reviewing your registered post types and taxonomies, you will now see a new column. Here you will see common template file names you can use to better target your post types and taxonomies. With those, you can further customize the frontend of your website. These are not special names from Custom Post Type UI. They come right from WordPress’ template stack.

Accessibility and usability improvements around the plugin

Last year one of our design leads, Greg, talked about The Basics of Developing Accessible Websites, and I knew I wanted to increase the accessibility of Custom Post Type UI. With that, I worked and revised the labels used on various forms used in Custom Post Type UI. I also updated the headings to match accessibility changes made in WordPress core. I plan to continue reviewing and improving accessibility in future versions as well. It is a job that is truly never done.

“Debug info” tab with debugging information  on the support forums

While I try to keep Custom Post Type UI as user-friendly and simple as possible, it is just not always the case. Sometimes, you just need some help figuring out how to do something. When that time comes, you hop over to the Custom Post Type UI support forum and post your questions. If you have ever had to do that, you have no doubt seen me show up. Depending on the situation, I may need more information to help debug the issue. This is where the new “debug info” tab will come into play. It will provide me with the needed extra information. This information will include:

  • Site URL
  • WordPress version
  • permalink structure
  • active theme
  • active plugins
  • registered post types from both Custom Post Type UI and elsewhere
  • Custom Post Type UI posts types and taxonomies settings
  • many other details.

If you are hesitant to share this information to the public, please let me know. I will provide a way to send the data in private.

Other quick notes

We have bumped the minimum version to WordPress 4.2. We also migrated the textdomain to match the slug we have on WordPress.org. If you would like to help translate Custom Post Type UI, let us know and we will point you in the right direction.

All in all, I am quite happy with how Custom Post Type UI version 1.2.0 turned out. I hope a lot of the new features help our users and address issues they were having.

webdevstudios.com

Добавление пользовательских иконок для меню с помощью плагина

Первым и самым важным делом, нам необходимо установить и активировать плагин CPT Custom Icon. После активации также по старинке и по привычке идем в Настройки — и выбираем наш установленный плагин. Затем вы выбираете нужную иконку в списке нажав на кнопку ссылку «Choose Icon»

Выбор пользовательской иконки для меню WordPress

Добавление иконки, используя плагин Custom Post Type UI

Если вы впервые регистрируете пользовательский тип записей, то мы рекомендуем вам использовать данный плагин UI для создания и управления такими записями и таксономиями.

Сам процесс добавления иконки к произвольным типам очень прост. Он поддерживает Dashicon по умолчанию. Вам нужно сначала посетить их сайт — https://developer.wordpress.org/resource/dashicons/#update и выбрать нужную иконку для произвольного типа записи.

Выбор dashicon класс значка для custom post types

Нажав на иконку в списке вы увидите ее увеличенную версию в самом верху. Рядом с ней вы обнаружите CSS класс. Это будет что-то наподобие dashicon — группы, календари, корзина и т. д. Вам нужно скопировать нужный CSS класс и нажать на кнопку редактирования пользовательских типов постов в плагине CPT UI.

Все что вам нужно это кликнуть на расширенные опции Advanced Options и прокрутить колесиком мышки до секции Menu Icon, вставить туда ЦСС класс и сохранить все изменения.

Добавление иконки wordpress в CPT UI

Вы можете также сами установить нужное изображение значка для меню меню WordPress и загрузить его, нажав на Медиафайлы — Добавить Новый. После загрузки нажмите на него и вы увидите его урл, который нужно будет вставить в секцию MENU ICON нашего плагина CPT UI

smarticle.ru

Создание произвольного типа записей с помощью плагинов

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

.

Название плагина Преимущества Недостатки
Easy Content Types Богатый функционал, удобный интерфейс Платное использование
Custom Post Type UI Дружественный интерфейс, возможность создания таксономий, хорошая поддержка. Отсутствует функционал для создания произвольных полей
More Types Интуитивно понятный интерфейс, интеграция с плагинами More Fields и More Taxonomies, средства экспорта Ограниченный функционал
WP Easy Post Types Возможность настройки отображения столбцов, встроенные средства для создания произвольных полей (сильно ограничены) Платная поддержка и запутанное меню администратора

Вместо того чтобы подробно описывать все шаги при создании произвольного типа записей, я записал видео, иллюстрирующее этот процесс. Для видеоролика мною был выбрал плагин More Types, поскольку я отдаю свою предпочтение удобному интерфейсу, и мне не требуются различные навороченные настройки. В этом примере я создам произвольный тип записей под названием ‘Books’.

Посмотреть видео

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

  • Title
  • Author
  • Description
  • URL
  • Publisher
  • Year
  • Thumbnail

Обработать поля можно будет с помощью еще одного превосходного плагина — Custom Field Template. Упомянутый ранее плагин More Fields позволяет легко справиться с этой задачей, однако он не может похвастаться такими же мощными инструментами, как Custom Field Template. В частности, если у вас должны быть поля для загрузки файлов, Custom Field Template является наилучшим выбором в этой ситуации. Если же плагин Custom Field Template кажется вам слишком тяжеловесным и сложным, однако вам необходимы поля для загрузки файлов, в таком случае вы можете попробовать другой удобный плагин, обладающий доступным интерфейсом — Verve Meta Boxes, который поддерживает поля для загрузки изображений и файлов. Еще одна альтернатива Custom Field Template — плагин Page.ly’s MultiEdit, позволяющий загружать произвольные поля, основанные на используемом шаблоне записей/страниц.

Для того чтобы сохранить целостность повествования, я покажу вам, как создать произвольные поля для нашего реализованного ранее произвольного типа записей ‘Books’. Сделаю я это с помощью плагина More Fields.

Посмотреть видео

Теперь мы можем увидеть результат нашей работы: новый пункт меню в панели администратора под названием ‘Books’. Щелните по нему и выберите ‘Add New’. Если вы все сделали верно, то на экране появится следующая страница:

Custom post type ui

Список плагинов, предназначенных для создания произвольных полей:

Название плагина Преимущества Недостатки
Custom Field Template Обладает многочисленными возможностями, включает поля загрузки файлов Несколько странный интерфейс
More Fields Великолепный интерфейс, приличное количество возможностей (включая WYSIWYG), интеграция с More Types Отсутствует загрузка файлов
Verve Meta Boxes Интуитивно понятный интерфейс, перетаскивание полей, загрузка файлов и изображений Не обнаружены
Page.ly MultiEdit Построенный на вкладках интерфейс, использование шаблонов записей/страниц Не обнаружены

Создание произвольного типа записей вручную

Для изучения того, как создать произвольный тип записей вручную, мы воспользуемся другим, более простым примером. На сей раз я создам произвольный тип записей под названием ‘Websites’. Этот тип записей будет использоваться для того, чтобы вывести на экран интересные веб-сайты, которые я рекомендую к посещению. Такая возможность отлично подойдет для создания портфолио, если вы являетесь, к примеру, веб-дизайнером.

В нашем примере я хочу иметь следующие поля для типа записей Websites:

  • Title
  • Description
  • URL
  • Screenshot

Для первых двух полей я буду использовать стандартный заголовок и редактор WordPress, а для оставшихся добавлю произвольную meta панель.

Для начала я должен определить новый произвольный тип записей в файле functions.php:

 /* Add Websites Custom Post Type */ add_action( 'init', 'create_website_type' );   function create_website_type() {  register_post_type( 'website',  array(  'labels' =&amp;gt; array(  'name' =&amp;gt; __( 'Websites' ),  'singular_name' =&amp;gt; __( 'Website' ),  'add_new' =&amp;gt; __( 'Add New Website' ),  'add_new_item' =&amp;gt; __( 'Add New Website' ),  'edit' =&amp;gt; __( 'Edit Website' ),  'edit_item' =&amp;gt; __( 'Edit Website' ),  'new_item' =&amp;gt; __( 'Add New Website' ),  'view' =&amp;gt; __( 'View Website' ),  'view_item' =&amp;gt; __( 'View Website' ),  'search_items' =&amp;gt; __( 'Search Websites' ),  'not_found' =&amp;gt; __( 'No Websites Found' ),  'not_found_in_trash' =&amp;gt; __( 'No Websites found in Trash' ),  ),  'description' =&amp;gt; __('Websites to be shown in Resources section.'),  'public' =&amp;gt; true,  'show_ui' =&amp;gt; true,  'publicly_queryable' =&amp;gt; true,  'exclude_from_search' =&amp;gt; false,  'menu_position' =&amp;gt; 20,  'supports' =&amp;gt; array( 'nothing' ),  'can_export' =&amp;gt; true  )  ); } 

Я не буду заострять свое внимание на используемых здесь параметрах, поскольку всю необходимую информацию о них можно получить из Кодекса WordPress: register_post_type.

Представленный код позволяет создать произвольный тип записей, обладающий функциональностью страниц. Если вы хотите, чтобы произвольный тип записей обладал поведением обычных записей (без настроек иерархии, однако с возможностью привязки меток и рубрик), вы можете добавить следующие параметры чуть ниже параметра ‘can_export’:

 'hierarchichal' =&amp;gt; false, 'capability_type' =&amp;gt; 'post', 

Создание произвольных meta панелей

Как только мы зарегистрировали наш новый тип записей, нам понадобится как-то представить их в WordPress. Самое время добавить произвольную meta панель. Пусть она называется ‘Website Details’ и содержит в себе поля ‘url’ и ‘screenshot’:

/* Add Custom Meta Box to Websites Post Type */   $new_meta_boxes =  array(  &amp;quot;url&amp;quot; =&amp;gt; array(  &amp;quot;name&amp;quot; =&amp;gt; &amp;quot;url&amp;quot;,  &amp;quot;std&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,  &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;URL&amp;quot;,  &amp;quot;description&amp;quot; =&amp;gt; &amp;quot;Enter the site's URL here.&amp;quot;),  &amp;quot;screenshot&amp;quot; =&amp;gt; array(  &amp;quot;name&amp;quot; =&amp;gt; &amp;quot;screenshot&amp;quot;,  &amp;quot;std&amp;quot; =&amp;gt; &amp;quot;&amp;quot;,  &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;Screenshot&amp;quot;,  &amp;quot;description&amp;quot; =&amp;gt; &amp;quot;Enter a link to the screenshot of the site.&amp;quot;) );   function new_meta_boxes() {  global $post, $new_meta_boxes;  foreach ($new_meta_boxes as $meta_box) {  $meta_box_value = get_post_meta($post-&amp;gt;ID, $meta_box['name'], true);  if($meta_box_value == &amp;quot;&amp;quot;)  $meta_box_value = $meta_box['std'];  echo'&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;'.$meta_box['name'].'_noncename&amp;quot; id=&amp;quot;'.$meta_box['name'].'_noncename&amp;quot; value=&amp;quot;'.wp_create_nonce( plugin_basename(__FILE__) ).'&amp;quot; /&amp;gt;';  echo'&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;'.$meta_box['title'].'&amp;lt;/strong&amp;gt;';  echo'&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;'.$meta_box['name'].'&amp;quot; value=&amp;quot;'.$meta_box_value.'&amp;quot; style=&amp;quot;width: 100%; margin-top: 5px;&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;';  echo'&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;label for=&amp;quot;'.$meta_box['name'].'&amp;quot;&amp;gt;'.$meta_box['description'].'&amp;lt;/label&amp;gt;&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;';  } }   function create_meta_box() {  if ( function_exists('add_meta_box') ) {  add_meta_box( 'new-meta-boxes', 'Website Details', 'new_meta_boxes', 'website', 'normal', 'high' );  } }   function save_postdata( $post_id ) { global $post, $new_meta_boxes;   foreach($new_meta_boxes as $meta_box) {  // Verify  if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) {  return $post_id;  }    if ( 'page' == $_POST['post_type'] ) {  if ( !current_user_can( 'edit_page', $post_id ))  return $post_id;  } else {  if ( !current_user_can( 'edit_post', $post_id ))  return $post_id;  }    $data = $_POST[$meta_box['name']];    if(get_post_meta($post_id, $meta_box['name']) == &amp;quot;&amp;quot;)  add_post_meta($post_id, $meta_box['name'], $data, true);  elseif($data != get_post_meta($post_id, $meta_box['name'], true))  update_post_meta($post_id, $meta_box['name'], $data);  elseif($data == &amp;quot;&amp;quot;)  delete_post_meta($post_id, $meta_box['name'], get_post_meta($post_id, $meta_box['name'], true));  }  }   add_action('admin_menu', 'create_meta_box'); add_action('save_post', 'save_postdata');  

Выбор количества столбцов для списка записей

Теперь мы можем отредактировать столбцы для нашего списка:

/* Customise columns shown in list of custom post type */ add_action(&amp;quot;manage_posts_custom_column&amp;quot;, &amp;quot;my_custom_columns&amp;quot;); add_filter(&amp;quot;manage_edit-website_columns&amp;quot;, &amp;quot;my_website_columns&amp;quot;);   function my_website_columns($columns) {  $columns = array(  &amp;quot;cb&amp;quot; =&amp;gt; &amp;quot;&amp;lt;input type=&amp;quot;checkbox&amp;quot; /&amp;gt;&amp;quot;,  &amp;quot;title&amp;quot; =&amp;gt; &amp;quot;Website&amp;quot;,  &amp;quot;url&amp;quot; =&amp;gt; &amp;quot;URL&amp;quot;,  );  return $columns; }   function my_custom_columns($column) {  global $post;  if (&amp;quot;ID&amp;quot; == $column) echo $post-&amp;gt;ID;  elseif (&amp;quot;url&amp;quot; == $column) {  $url = get_post_meta($post-&amp;gt;ID, &amp;quot;url&amp;quot;, $single=true);  echo &amp;quot;&amp;lt;a href=&amp;quot;$url&amp;quot;&amp;gt;$url&amp;lt;/a&amp;gt;&amp;quot;;  } } 

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

Отображение произвольных типов записей

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

&amp;lt;?php $loop = new WP_Query( array( 'post_type' =&amp;gt; 'website', 'posts_per_page' =&amp;gt; 0 ) ); ?&amp;gt;   &amp;lt;?php while ( $loop-&amp;gt;have_posts() ) : $loop-&amp;gt;the_post(); ?&amp;gt;    &amp;lt;?php the_title( '&amp;lt;h2 class=&amp;quot;entry-title&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;' . get_permalink() . '&amp;quot; title=&amp;quot;' . the_title_attribute( 'echo=0' ) . '&amp;quot; rel=&amp;quot;bookmark&amp;quot;&amp;gt;', '&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;' ); ?&amp;gt;    &amp;lt;div class=&amp;quot;entry-content&amp;quot;&amp;gt;  &amp;lt;?php the_content(); ?&amp;gt;  &amp;lt;?php  if(get_post_meta($post-&amp;gt;ID, &amp;quot;screenshot&amp;quot;, $single = true) != &amp;quot;&amp;quot;) :  ?&amp;gt;  &amp;lt;img src=&amp;quot;&amp;lt;?php echo get_post_meta($post-&amp;gt;ID, &amp;quot;screenshot&amp;quot;, $single = true); ?&amp;gt;&amp;quot; alt=&amp;quot;&amp;lt;?php the_title(); ?&amp;gt;&amp;quot; /&amp;gt;  &amp;lt;?php  endif;  if(get_post_meta($post-&amp;gt;ID, &amp;quot;url&amp;quot;, $single = true) != &amp;quot;&amp;quot;) :  echo get_post_meta($post-&amp;gt;ID, &amp;quot;url&amp;quot;, $single = true);  endif;    ?&amp;gt;  &amp;lt;/div&amp;gt; &amp;lt;?php endwhile; ?&amp;gt; 

Отображение списка страниц для произвольного типа данных

&amp;lt;?php wp_list_pages( array( 'post_type', 'something' ) ); ?&amp;gt;

По материалам сайта: http://www.wpmayor.com/posts/step-by-step/ultimate-guide-wordpress-custom-post-types/

oddstyle.ru


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.