Типы постов в WordPress. Добавление собственных произвольных типов постов.

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

Почему раньше WordPress называли движком только для блогов? Потому что раньше в нем не было типов записей (на самом деле некоторые люди с сайтами на джумле до сих пор упрямо считают, что удел WP — блоги, но мы все прекрасно знаем, что это далеко не так).

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

Стандартные типы записей WordPress

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

  • Записи (каждый тип поста имеет отдельное название для использования в коде, у записей это post)
  • Страницы page
  • Вложения attachment
  • Редакции revision
  • Элементы меню nav_menu_item

Что общего у всех этих типов? Все они являются элементами содержимого сайта, имеют какие-либо параметры. Информацию о них можно получить или вывести, например в виде объекта поста WP_Post.

Давайте вкратце рассмотрим каждый из стандартных типов постов, чтобы иметь общее представление о них.

Записи

Если на вашем сайте присутствует блог, то этот стандартный тип поста очень удобно использовать в качестве статей на блоге. Записи по умолчанию выводятся на главных страницах многих тем WordPress в порядке даты публикации (по убыванию). Они также попадают в RSS-ленту сайта.

тип постов Записи

Шаблоном страницы записи является файл темы single.php.

Страницы

О да! Страницы — это потрясающая штука! В целом они похожи на записи, но имеют несколько уникальных особенностей. Итак, страницы:

тип постов Страницы
  • Первое и самое главное — страницы могут использовать произвольный файл из папки с темой в качестве своего HTML/PHP шаблона. Это значит, что в принципе каждая страница может кардинально отличаться от общего дизайна и верстки сайта.
  • Имеют иерархию. Т.е. одна страница может быть родительской для других страниц.
  • Имеется возможность сортировать их по порядку. В принципе каждый тип поста имеет такую возможность, но в страницах этот функционал предусмотрен по умолчанию.
  • При включенных постоянных ссылках на сайте, страницы имеют URL вида http://ваш-сайт.ru/ярлык_страницы, например https://truemisha.ru/contacts. Если имеются родительские элементы, они также будут включены в URL. Удобно.

В качестве шаблона страницы может быть задействован один из следующих файлов. Файлы указаны в порядке приоритета задействования. Т.е., если файла под номером 1 не существует, то будет задействован файл под номером 2.

  1. {ваш_шаблон}.php файл с произвольным названием, будет использоваться как шаблон страницы, если выбран на странице редактирования страницы.
  2. page-{ярлык_страницы}.php
  3. page-{ID_страницы}.php
  4. page.php

Вложения

Тип поста, предназначенный для управления файлами, загруженными через стандартный вордпрессовский загрузчик, а также для хранения информации о них. Например у изображений это может быть их размер, альтернативный текст (для HTML-атрибута alt) и т.д.

тип поста Вложения

Редакции

Редакции записей — это черновики, которые автоматически сохраняются в процессе редактирования записей (также могут быть использованы и в других типах постов, не только в post). И, если вы вдруг написали в своей статье что-то не то, вы всегда cможете восстановить её старую версию из одной из редакций.

тип поста Редакции

Метабокс с редакциями вы найдёте на странице редактирования любой записи.

Элементы меню

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

Регистрация пользовательского типа поста

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

В качестве примера давайте добавим «Функции WordPress». То есть, нам нужно, чтобы у функций был собственный шаблон страниц, собственные категории, ну, и если мы будем постить по 3 функции в день (к примеру), то нам тем более не надо захламлять RSS-канал.

Всего будет 4 шага создания типа поста. На самом деле, чтобы всё заработало, достаточно и одного-двух этапов, но нам ведь надо, чтобы всё было на высшем уровне.

Шаг 1. register_post_type()

Всё начинается с функции register_post_type(). Пока что вы можете использовать код, приведённый ниже, подставив свои собственные значения параметров в массивы.

add_action( 'init', 'true_register_post_type_init' ); // Использовать функцию только внутри хука init
 
function true_register_post_type_init() {
	$labels = array(
		'name' => 'Функции',
		'singular_name' => 'Функцию', // админ панель Добавить->Функцию
		'add_new' => 'Добавить функцию',
		'add_new_item' => 'Добавить новую функцию', // заголовок тега <title>
		'edit_item' => 'Редактировать функцию',
		'new_item' => 'Новая функция',
		'all_items' => 'Все функции',
		'view_item' => 'Просмотр функции на сайте',
		'search_items' => 'Искать функции',
		'not_found' =>  'Функций не найдено.',
		'not_found_in_trash' => 'В корзине нет функций.',
		'menu_name' => 'Кодекс WP' // ссылка в меню в админке
	);
	$args = array(
		'labels' => $labels,
		'public' => true,
		'show_ui' => true, // показывать интерфейс в админке
		'has_archive' => true, 
		'menu_icon' => get_stylesheet_directory_uri() .'/img/function_icon.png', // иконка в меню
		'menu_position' => 20, // порядок в меню
		'supports' => array( 'title', 'editor', 'comments', 'author', 'thumbnail')
	);
	register_post_type('functions', $args);
}

Важно: в качестве имени типа поста (первый аргумент функции) нельзя использовать следующие слова: post, page, attachment, revision, nav_menu_item, action, order, theme. Помню случай, когда я пытался зарегистрировать тип поста order и не мог понять, почему ничего не работает.

Этот пример очень упрощён. На моем блоге вы также найдете полную документацию функции register_post_type() с подробным описанием её параметров и их значений.

Если не знаете, куда вставлять код из этого поста, вставляйте всё в файл functions.php. Таких файлов может быть несколько, нам нужен тот, который находится непосредственно в папке с текущей темой.

В результате получаем:

Результат действия функции register_post_type()

Круто, да?

Шаг 2. Тексты уведомлений для типа постов

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

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

Сообщение, появляющееся при обновлении поста данного типа

Если вы пропустите этот шаг, то по умолчанию будут использоваться уведомления из записей типа post.

add_filter( 'post_updated_messages', 'true_post_type_messages' );
 
function true_post_type_messages( $messages ) {
	global $post, $post_ID;
 
	$messages['functions'] = array( // functions - название созданного нами типа записей
		0 => '', // Данный индекс не используется.
		1 => sprintf( 'Функция обновлена. <a href="%s">Просмотр</a>', esc_url( get_permalink($post_ID) ) ),
		2 => 'Параметр обновлён.',
		3 => 'Параметр удалён.',
		4 => 'Функция обновлена',
		5 => isset($_GET['revision']) ? sprintf( 'Функция восстановлена из редакции: %s', wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
		6 => sprintf( 'Функция опубликована на сайте. <a href="%s">Просмотр</a>', esc_url( get_permalink($post_ID) ) ),
		7 => 'Функция сохранена.',
		8 => sprintf( 'Отправлено на проверку. <a target="_blank" href="%s">Просмотр</a>', esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
		9 => sprintf( 'Запланировано на публикацию: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Просмотр</a>', date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
		10 => sprintf( 'Черновик обновлён. <a target="_blank" href="%s">Просмотр</a>', esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
	);
 
	return $messages;
}

Шаг 3. Вкладка «Помощь»

Вкладка «Помощь» находится в правой верхней части экрана. Для нашего типа поста её ещё пока что нет, но вы сможете найти её на странице редактирования записей например.

вкладка Помощь в верхней правой части экрана

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

Следующий код будет работать в версиях WordPress 3.3 и выше. Более старые версии WordPress в данном случае рассматривать не вижу смысла.

function true_post_type_help_tab() {
 
	$screen = get_current_screen();
 
	// Прекращаем выполнение функции, если находимся на страницах других типов постов
	if ( 'functions' != $screen->post_type )
		return;
 
	// Массив параметров для первой вкладки
	$args = array(
		'id'      => 'tab_1',
		'title'   => 'Обзор',
		'content' => '<h3>Обзор</h3><p>Содержимое первой вкладки.</p>'
	);
 
	// Добавляем вкладку
	$screen->add_help_tab( $args );
 
	// Массив параметров для второй вкладки
	$args = array(
		'id'      => 'tab_2',
		'title'   => 'Доступные действия',
		'content' => '<h3>Доступные действия с типом постов &laquo;' . $screen->post_type . '&raquo;</h3><p>Содержимое второй вкладки</p>'
	);
 
	// Добавляем вторую вкладку
	$screen->add_help_tab( $args );
 
}
 
add_action('admin_head', 'true_post_type_help_tab');

При использовании этого кода получаем:

содержимое вкладки Помощь

Шаг 4. Обновление постоянных ссылок

Завершающий штрих. Если на вашем сайте включены пермалинки, то, для того, чтобы страницы типа поста корректно отображались (и отображались вообще), переходим в Параметры > Постоянные ссылки и, ничего не меняя, нажимаем «Сохранить изменения».

Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

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

  • Роман7 апреля 2014 в 13:04 #

    А как добавить к новому типу постов, возможность добавления комментариев. В данный момент пишет -
    No comments so far!
    Comments are closed

    При чем для стандартных записей и страниц комментарии работают

  • Mikola15 августа 2014 в 00:08 #

    Спасибо огромное. Прикрутил магазин на wordpress, и надо было сделать отдельный тип записей для товаров. Перепробовал разные плагины, а все было не то. А тут все так просто и понятно, ничего лишнего. Очень помогло. Сейчас вот пытаюсь добавить таксономию, разбить полученные товары на рубрики и добавить метки. Может подскажете как это сделать?

  • Mikola15 августа 2014 в 02:08 #

    С таксономией разобрался. Вставляем следом за вышеописанным в статье кодом в functions.php, код такой:

    add_action( 'init', 'create_book_taxonomies', 0 );
     
    // функция, создающая таксономию "Разделы" для постов типа "Товары"
     
    function create_book_taxonomies(){
     
      // определяем заголовки для 'Разделы'
      $labels = array(
    	'name' => _x( 'Разделы', 'taxonomy general name' ),
    	'singular_name' => _x( 'Разделы', 'taxonomy singular name' ),
    	'search_items' =>  __( 'Искать Разделы' ),
    	'popular_items' => __( 'Популярные Разделы' ),
    	'all_items' => __( 'Все Разделы' ),
    	'parent_item' => null,
    	'parent_item_colon' => null,
    	'edit_item' => __( 'Править Раздел' ),
    	'update_item' => __( 'Обновить Раздел' ),
    	'add_new_item' => __( 'Добавить новый Раздел' ),
    	'new_item_name' => __( 'Имя нового Раздела' ),
    	'separate_items_with_commas' => __( 'Separate writers with commas' ),
    	'add_or_remove_items' => __( 'Добавить или удалить Раздел' ),
    	'choose_from_most_used' => __( 'Choose from the most used writers' ),
    	'menu_name' => __( 'Разделы' ),
      );
    // Добавляем древовидную таксономию 'Разделы' (как рубрики), чтобы сделать НЕ девовидную (как метки) значение для 'hierarchical' => false,
     
    register_taxonomy('section', 'articles',array(
    	'hierarchical' => true,
    	'labels' => $labels,
    	'show_ui' => true,
    	'query_var' => true,
    	'rewrite' => array( 'slug' => 'section' ),
      ));
    }

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

    • LEXXiY31 октября 2014 в 13:10 #

      Здравствуйте. Сделал таксономию типа "Рубрики", ссылка формируется нормально, но, когда пытаешься открыть запись в этой рубрике, выдает 404 ошибку :(
      Ссылка получается вида сайт.ру/рубрика/подрубрика/пост.html

      Т.е. таксономия типа "Теги" работает нормально, посты открываются, а в рубриках, нет :(
      Не подскажете как с этим бороться?

    • seorch22 декабря 2014 в 12:12 #

      Не получается....
      Добавил ваш код в функцион пхп, но ничего не поменялось...

  • Константин3 октября 2014 в 18:10 #

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

    • Миша3 октября 2014 в 21:10 #

      Попробуйте использовать фильтр pre_get_posts, я писал про него тут.

      • Константин4 октября 2014 в 12:10 #

        А если у меня и категории свои?
        Короче я поставил плагин Events Manager он создал свои типы для Категорий, записей, тегов... А тема у меня на главной выводит последние записи по категориям.
        Т.е. блок :
        Категория 1 а в ней 4 последних записи.
        Категория 2 и в ней 4 последних записей.
        Так вот я уже долго борюсь с тем чтоб подменить в выводе в теме category на event-categories и post на event

  • Андрей12 марта 2015 в 13:03 #
    Шаг 4. Обновление постоянных ссылок
    ... и, ничего не меняя, нажимаем «Сохранить изменения».

    А можно так

    // ...code
    register_post_type( POST_TYPE_NAME , $args );
    flush_rewrite_rules(false);
  • Рыгор27 марта 2015 в 16:03 #

    подскажите пожалуйста, как подключить теги к произвольным типам записи?

  • Артем10 июля 2015 в 14:07 #

    Приветствую, Михаил! Вопрос такой. Возможно ли сделать в произвольном типе несколько записей со своими шаблонами страниц. Например, есть произвольная запись Игрок, внутри у нее есть таксономии Лига, Команда и ДВЕ записи Анкета и Характеристики

    Возможно ли такое вообще и если возможно, то как сие сделать?

  • Игорь28 июля 2015 в 16:07 #

    А как вывести новый тип во Внешний вид - Меню
    Новый тип не отображается там.
    Отображается только стандартные.
    А мне надо добавлять в меню ссылки нового типа записи

    • Артем28 июля 2015 в 16:07 #

      Смотрите Настройки экрана (верхний правый угол) в разделе Меню, наверняка надо просто галочку поставить для нужной кастомной записи

  • Аман4 августа 2015 в 16:08 #

    Добрый день.
    Сделал произвольный тип, все показывается и работает, но нет постраничной навигации.
    Доходит до 10 записи и все.

    вставлял , но все равно не показывает

  • Артём14 сентября 2015 в 17:09 #

    Народ помогите разобраться.
    Зарегистрировал свой тип данных
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'query_var' => true,
    'taxonomies'=>array( 'clothing','clothing2' ),
    'rewrite'=>array( 'slug' => 'services'),
    'capability_type' => 'post',
    'hierarchical' => true,
    'supports' => array(

    'title',
    'editor',
    'comments',
    'thumbnail',
    'page-attributes',
    'post-formats'
    )
    создаю пост все нормально работает, а
    как только указываю родителя
    Пост не открывает, а вообще переадресовывает на дефолтовую запсиь "привет мир"

    в чем проблема может быть?

  • Михаил6 октября 2015 в 19:10 #

    Есть несколько вопросов:
    - После создания произвольного типа записи категории у неё будут общие со стандартным типом ?
    - Теперь при создании нового типа записи он создает урл: домен/название типа записи/имя записи. Как сделать так чтобы он делал как и раньше. Потому что поломались и хлебные крошки после этого

    • Артем6 октября 2015 в 20:10 #

      Категории вообще не будет у произвольных записей. Их надо отдельно подключать

      Чтобы не ломались пермалинки надо добавить еще аргумент

      'rewrite' => array(
      					'with_front' => false,
      				),
      • Михаил6 октября 2015 в 20:10 #

        Я в итоге сделал всё через плагин custom post type ui, Соответственно у меня вопрос куда вставить этот код ? и как быть с категориями ?

      • Михаил6 октября 2015 в 21:10 #

        Или может вообще не заморачиваться с произвольным типом записаей и сделать всё через шаблоны стандартных записей ?

  • Владимир16 октября 2015 в 07:10 #

    добрый день!
    Прошу помочь, как вывести произвольные поля в созданном произвольном типе поста?

    /**********************************************************/
    /* Блок произвольных полей для произвольного типа записей */
    /**********************************************************/
    add_action('add_meta_boxes', 'my_extra_fields', 1);
     
    function my_extra_fields() {
    	add_meta_box( 'extra_fields', 'Дополнительные поля', 'extra_fields_box_func', 'post', 'normal', 'high'  );
    }
    ?>
    <?php
    // код блока
    function extra_fields_box_func( $post ){
    	?>
    	<p><label><input type="text" name="extra[title]" value="<?php echo get_post_meta($post->ID, 'title', 1); ?>" style="width:50%" /> ? заголовок страницы (title)</label></p>
     
    	<p>Описание статьи (description):
    		<textarea type="text" name="extra[description]" style="width:100%;height:50px;"><?php echo get_post_meta($post->ID, 'description', 1); ?></textarea>
    	</p>
     
    	<p>Видимость поста: <?php $mark_v = get_post_meta($post->ID, 'robotmeta', 1); ?>
    		 <label><input type="radio" name="extra[robotmeta]" value="" <?php checked( $mark_v, '' ); ?> /> index,follow</label>
    		 <label><input type="radio" name="extra[robotmeta]" value="nofollow" <?php checked( $mark_v, 'nofollow' ); ?> /> nofollow</label>
    		 <label><input type="radio" name="extra[robotmeta]" value="noindex" <?php checked( $mark_v, 'noindex' ); ?> /> noindex</label>
    		 <label><input type="radio" name="extra[robotmeta]" value="noindex,nofollow" <?php checked( $mark_v, 'noindex,nofollow' ); ?> /> noindex,nofollow</label>
    	</p>
     
    	<input type="hidden" name="extra_fields_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
    	<?php
    }
    add_action('save_post', 'my_extra_fields_update', 0);
     
    /******************************************/
    /* Сохраняем данные, при сохранении поста */
    function my_extra_fields_update( $post_id ){
    	if ( !wp_verify_nonce($_POST['extra_fields_nonce'], __FILE__) ) return false; // проверка
    	if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE  ) return false; // выходим если это автосохранение
    	if ( !current_user_can('edit_post', $post_id) ) return false; // выходим если юзер не имеет право редактировать запись
    	if( !isset($_POST['extra']) ) return false;	// выходим если данных нет
    	// Все ОК! Теперь, нужно сохранить/удалить данные
    	$_POST['extra'] = array_map('trim', $_POST['extra']); // чистим все данные от пробелов по краям
    	foreach( $_POST['extra'] as $key=>$value ){
    		if( empty($value) ){
    			delete_post_meta($post_id, $key); // удаляем поле если значение пустое
    			continue;
    		}
    		update_post_meta($post_id, $key, $value); // add_post_meta() работает автоматически
    	}
    	return $post_id;
    }
    /*********************************************/

    Этот код выводит только на страницах записи произвольные поля, а мне нужно в на записи созданного произвольного типа.

    • Миша16 октября 2015 в 20:10 #

      Добрый день!

      7
      
      add_meta_box( 'extra_fields', 'Дополнительные поля', 'extra_fields_box_func', 'post', 'normal', 'high'  );

      Замените в этой строчке post на название вашего произвольного типа. А на записи вам тоже нужно?

      • Владимир17 октября 2015 в 08:10 #

        Спасибо помогло! А если придется и в других записях делать нужно

        any

        писать?

        • Владимир17 октября 2015 в 10:10 #

          Добрый день Михаил. Вот когда тип определяется так

          register_post_type('shop',
              array(
                  'labels' => array(
                      'name' => __('Товары'),
                      'singular_name' => __('Shop'),
                      //остальные переводы
                  ),
                  'public' => true,
                  'publicly_queryable' => true,
                  'query_var' => true,
                  'taxonomies' => array('category','post_tag'),
                  'supports' => array('title','editor','author','thumbnail','excerpt','comments'),
                  'rewrite' => array('slug' => 'shop'),
                  //другие настройки
              )
          );
          function prefix_pre_get_posts($query) {
               if ($query->is_category) {
                    $query->set('post_type', 'any');
               }
               return $query;
          }
          add_action('pre_get_posts', 'prefix_pre_get_posts');
          add_action('add_meta_boxes', 'my_extra_fields', 1);
          function my_extra_fields() {
          	add_meta_box( 'extra_fields', 'Дополнительные поля', 'extra_fields_box_func', 'shop', 'normal', 'high'  );
          }

          Поля появляются. А если так

          add_action( 'init', 'true_register_post_type_init' ); // Использовать функцию только внутри хука init
           
          function true_register_post_type_init() {
          	$labels = array(
          		'name' => 'Продукты',
          		'singular_name' => 'Product', // админ панель Добавить->Функцию
          		'add_new' => 'Добавить Продукт',
          		'add_new_item' => 'Добавить новый Продукт', // заголовок тега <title>
          		'edit_item' => 'Редактировать Продукт',
          		'new_item' => 'Новая Продукт',
          		'all_items' => 'Все Продукт',
          		'view_item' => 'Просмотр Продукта на сайте',
          		'search_items' => 'Искать Продукт',
          		'not_found' =>  'Продукт не найдено.',
          		'not_found_in_trash' => 'В корзине нет Продукта.',
          		'menu_name' => 'Продукты' // ссылка в меню в админке
          	);
          	$args = array(
          		'labels' => $labels,
          		'public' => true,
          		'show_ui' => true, // показывать интерфейс в админке
          		'has_archive' => true, 
          		'menu_icon' => get_stylesheet_directory_uri() .'/img/burn.png', // иконка в меню
          		'menu_position' => 20, // порядок в меню
          		'supports' => array( 'title', 'editor', 'comments', 'author', 'thumbnail')
          	);
          	register_post_type('functions', $args);
          }
          add_action('add_meta_boxes', 'my_extra_fields', 1);
          function my_extra_fields() {
          	add_meta_box( 'extra_fields', 'Дополнительные поля', 'extra_fields_box_func', 'Product', 'normal', 'high'  );
          }

          не появляются. Я еще Новичок в WordPress и php. Охота разобраться. Может подскажите где почитать

        • Миша17 октября 2015 в 13:10 #
          array('тип 1','тип 2')
  • Михаил16 октября 2015 в 08:10 #

    А зачем вы в функциях пишете ? в Advansed custom fields можно привязать поля и к кастомным типам записей. А блок произвольных полей добавить в single.php

  • Игорь19 октября 2015 в 14:10 #

    Добрый день!
    Вынес блог как произвольный тип записей (записи и рубрики). Возникло 2 проблемы:
    1. Через меню вывожу рубрики в корневом разделе (site.ru/slug/). Но в них нет слага! То есть вместо site.ru/slug/name-rubrik получаю site.ru/name-rubrik
    2. Как бы tag сделать как у вас, чтобы было https://truemisha.ru/blog/tag/tutorials сейчас опять же имею site.ru/tag/name-tag

    • Миша19 октября 2015 в 16:10 #

      Добрый день!
      В настройках постоянных ссылок установите префикс для меток blog/tag.

      Кроме того, в функции register_post_type есть параметр rewrite with_front, попробуйте установить true.

      • Игорь19 октября 2015 в 17:10 #

        with_front принимает значение true по-умолчанию. с тегами вопрос решился. для рубрик также добавил префикс в виде интересующего меня слага. не очень в восторге от такого решения вопроса по рубрикам.. но вроде работает.

  • M-Petro8 ноября 2015 в 18:11 #

    все получилось.
    Но возникла следующая проблема.
    Как сделать ссылку следующего вида:

    /%postname%/%year%-%monthnum%-%day%-%post_id%
    /news/shkoli_otrimajut_pidruchniki_do_kincja_roku_mon/2015-10-01-313
    (/%category%/%postname%/%year%-%monthnum%-%day%-%post_id%)

    Сейчас она такая:
    /news/shkoli_otrimajut_pidruchniki_do_kincja_roku_mon

  • Сергей14 декабря 2015 в 09:12 #

    Здравствуйте! Возникла такая проблема:

    После добавления нового типа записи я забыл обновить постоянные ссылки. Теперь я не могу просматривать посты, публикуемые в этом типе записи - у меня просто отображается главная страница.
    Дальнейшее обновление постоянных ссылок не помогло. Проблема решается только когда я во вкладе "Постоянные ссылки" выставляю параметр "Простые", но меня такой вариант не устраивает. Подскажите как поступить в такой ситуации.
    Заранее спасибо за ответ.

    • Миша15 декабря 2015 в 13:12 #

      Здравствуйте!
      Не имеет значения, когда вы обновляете постоянные ссылки - сразу после создания типа записи или потом. Возможно проблема в чем-то другом. Как вы назвали свой тип?

  • Сергей16 декабря 2015 в 09:12 #

    При регистрации типа записи, оказывается не было ошибок. Я одновременно регистрировал таксономию и из-за параметра rewrite мой пост не отображался.

     'rewrite' => array(
    				'slug' => 'articles', // странно, но после того как я переименовал его в articles-page пост отобразился. 
    				'hierarchical' => false
    		       )
  • Иван19 августа 2016 в 22:08 #

    Михаил, здравствуйте. Мне нужно реализовать портфолио примерно как у вас. Можетет помочь с этим? В общем, зарегистрировал я кастомный тип записи my-portoflio. Создал страницу с Портфолио и шаблон page-portfolio.php, в нем вывожу превью кастомной записи с помощью get_posts();. Создал сам файл single-portfolio.php и там вывожу сам текст. И все вроде бы хорошо. Но адреса не очень красиво получаются.

    Например, у вас так: truemisha.ru/portfolio и потом truemisha.ru/portfolio/работа. У меня же вот так: сайт.ru/portfolio, а вот потом сайт.ru/my_portfolio/работа. То есть адрес сайта меняется, это не очень красиво. Причем при попытке переименовать название кастомного типа записи на просто portfolio, перестают подключаться шаблоны page-portfolio.php и single-portfolio.php, а выводится архив.

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

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.

  • Артем: Ага, понял. Вот только почему $args? Она же нигде не определена, по логике должна быть переменная $true_field_params или...