Создание собственного раздела поста (WordPress)

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

В вордпресе есть записи и рубрики, по умолчанию, но что если у нас будет три рубрики (Клиники, Питомники, Зоомагазины) и в каждой по 100 записей? Тогда чтоб просматривать записи конкретной рубрики, надо воспользоваться фильтром и уже потом смотреть те записи которые нужны.

А можно сделать по другому, создать другой тип поста, например «Клиники» и вывести его в общем меню, тогда достаточно зайти в меню «Клиники» у уже работать только со всеми записями относящимися к этой группе. Это удобно да и красиво будет выглядеть в админке.

И так приступим.

Реализация.

Добавляем новый тип записей для клиник, делаем правки в файле темы functions.php


/*
Добавление "Клиники" на сайт
*/
add_action( 'init', 'create_news_post_type_polyclinic');

function create_news_post_type_polyclinic() {
  register_post_type('polyclinic',
  array(
    'label' => 'Клиники',
    'public' => TRUE,
    'rewrite' => array( 'slug' => 'polyclinic', 'with_front' => false ), //вместе с параметром 'has_archive' необходим для архива постов
    'has_archive' => false, // был true, вместе с параметром 'rewrite' необходим для архива постов
    'public' => true,
    'labels'=> array(
    'name'=>'Клиники', //Переопределяет название в меню, а также, если есть таксономия, то отображается на странице таксономии как заголовок к графе с количеством постов в терме таксономии
    'singular_name'=>'Клиника', //Название одного экземпляра этого поста
    'add_new'=>'Добавить клинику', //Название меню для добавления нового поста данного типа
    'add_new_item'=>'Страница добавления новой клиники', //Заголовок страницы, на которой добавляются новые посты
    'edit_item'=>'Редактировать клинику', //Заголовок страницы, на которой посты редактируются
    'new_item'=>'Добавить клинику', //Не найдено
  ),
  'supports' => array('title','editor','author','thumbnail','excerpt','comments'),
  'menu_icon' => 'dashicons-images-alt2',
  'menu_position' => 4,
  )
  );
  flush_rewrite_rules(false); //Специальная функция, которая сделает так, чтобы изменения вступили в силу сразу же (не нужно было обновлять настройки с постоянными ссылками)
}

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

Еще обратите внимание на урл страница постов клиники

wp-admin/edit.php?post_type=polyclinic

то есть тут четко видно новый тип поста post_type=polyclinic

Так же обратите внимание что данный пример не дает создавать древовидность записей, то есть нет возможности создавать рубрики и записи в них.

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

<?
/*
Добавление "Врачи" на сайт
*/
add_action( 'init', 'register_post_type_doctors' );
function register_post_type_doctors() {
// Раздел врача - doctorscat
register_taxonomy('doctorscat', array('doctors'), array(
'label' => 'Раздел врача', // определяется параметром $labels->name
'labels' => array(
'name' => 'Разделы врачей',
'singular_name' => 'Раздел врача',
'search_items' => 'Искать Раздел врача',
'all_items' => 'Все Разделы врачей',
'parent_item' => 'Родит. раздел врача',
'parent_item_colon' => 'Родит. раздел врача:',
'edit_item' => 'Ред. Раздел врача',
'update_item' => 'Обновить Раздел врача',
'add_new_item' => 'Добавить Раздел врача',
'new_item_name' => 'Новый Раздел врача',
'menu_name' => 'Раздел врача',
),
'description' => 'Рубрики для раздела врачей', // описание таксономии
'public' => true,
'show_in_nav_menus' => false, // равен аргументу public
'show_ui' => true, // равен аргументу public
'show_tagcloud' => false, // равен аргументу show_ui
'hierarchical' => true,
'rewrite' => array('slug'=>'doctors', 'hierarchical'=>false, 'with_front'=>false, 'feed'=>false ),
'show_admin_column' => true, // Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5)
) );

// тип записи - врачи - doctors
register_post_type('doctors', array(
'label' => 'Врачи',
'labels' => array(
'name' => 'Врачи',
'singular_name' => 'Врач',
'menu_name' => 'Врачи',
'all_items' => 'Все врачи',
'add_new' => 'Добавить врача',
'add_new_item' => 'Добавить нового врача',
'edit' => 'Редактировать',
'edit_item' => 'Редактировать врача',
'new_item' => 'Новый врач',
),
'description' => '',
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_rest' => false,
'rest_base' => '',
'show_in_menu' => true,
'exclude_from_search' => false,
'capability_type' => 'post',
'map_meta_cap' => true,
'hierarchical' => false,
'rewrite' => array( 'slug'=>'doctors/%doctorscat%', 'with_front'=>false, 'pages'=>false, 'feeds'=>false, 'feed'=>false ),
'has_archive' => 'doctors',
'query_var' => true,
'supports' => array( 'title','editor','author','thumbnail','excerpt','comments' ),
'taxonomies' => array( 'doctorscat' ),
) );

flush_rewrite_rules(false); //Специальная функция, которая сделает так, чтобы изменения вступили в силу сразу же (не нужно было обновлять настройки с постоянными ссылками)
}

## Отфильтруем ЧПУ произвольного типа
// фильтр: apply_filters( 'post_type_link', $post_link, $post, $leavename, $sample );
add_filter('post_type_link', 'faq_permalink', 1, 2);
function faq_permalink( $permalink, $post ){
// выходим если это не наш тип записи: без холдера %products%
if( strpos($permalink, '%doctorscat%') === false )
return $permalink;

// Получаем элементы таксы
$terms = get_the_terms($post, 'doctorscat');
// если есть элемент заменим холдер
if( ! is_wp_error($terms) && !empty($terms) && is_object($terms[0]) )
$term_slug = array_pop($terms)->slug;
// элемента нет, а должен быть...
else
$term_slug = 'no-doctorscat';

return str_replace('%doctorscat%', $term_slug, $permalink );
}
?>

 

 

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

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