- Главная
- Добавить таксономию (свой тип записи) WordPress
Добавить таксономию (свой тип записи) WordPress
18 июня 2020
//Таксономия Услуга
add_action( 'init', 'register_services_post_type' );
function register_services_post_type() {
register_taxonomy('servicescat', array('services'), array(
'label' => 'Рубрика услуг', // определяется параметром $labels->name
'labels' => array(
'name' => 'Рубрики услуг',
'singular_name' => 'Рубрика услуг',
),
'public' => true,
'show_in_nav_menus' => false, // равен аргументу public
'show_ui' => true, // равен аргументу public
'show_tagcloud' => false, // равен аргументу show_ui
'hierarchical' => true,
'rewrite' => array('slug'=>'services', 'hierarchical'=>false, 'with_front'=>false, 'feed'=>false ),
'show_admin_column' => true, // Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5)
'show_in_rest'=> true,
) );
register_post_type('services', array(
'label' => 'Услуга',
'labels' => array(
'name' => 'Услуга',
'singular_name' => 'Услуга',
'menu_name' => 'Услуги',
'all_items' => 'Все услуги',
'add_new' => 'Добавить услугу',
'add_new_item' => 'Добавить новую услугу',
'edit' => 'Редактировать',
'edit_item' => 'Редактировать услугу',
'new_item' => 'Новая услуга',
),
'menu_position' => 4,
'description' => '',
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_rest' => true,
'rest_base' => '',
'show_in_menu' => true,
'exclude_from_search' => false,
'capability_type' => 'post',
'map_meta_cap' => true,
'hierarchical' => false,
'rewrite' => array( 'slug'=>'services/%servicescat%', 'with_front'=>false, 'pages'=>false, 'feeds'=>false, 'feed'=>false ),
'has_archive' => 'services',
'query_var' => true,
'supports' => array( 'title', 'editor', 'thumbnail' ),
'taxonomies' => array( 'servicescat' ),
) );
}
add_filter('post_type_link', 'services_permalink', 1, 2);
function services_permalink( $permalink, $post ){
if( strpos($permalink, '%servicescat%') === false )
return $permalink;
$terms = get_the_terms($post, 'servicescat');
if( ! is_wp_error($terms) && !empty($terms) && is_object($terms[0]) )
$term_slug = array_pop($terms)->slug;
else
$term_slug = 'no-servicescat';
return str_replace('%servicescat%', $term_slug, $permalink );
}
//Таксономия Услуга
Удалить slag из url
//убрать слаг из таксономий
function sh_remove_cpt_slug( $post_link, $post, $leavename ) {
if ( in_array( $post->post_type, array( 'news' ) )
|| in_array( $post->post_type, array( 'post' ) )
|| in_array( $post->post_type, array( 'services' ) )
|| in_array( $post->post_type, array( 'area' ) )
|| in_array( $post->post_type, array( 'metro' ) )
|| 'publish' == $post->post_status )
$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
return $post_link;
}
add_filter( 'post_type_link', 'sh_remove_cpt_slug', 10, 3 );
function sh_parse_request( $query ) {
if ( ! $query->is_main_query() ) {
return;
}
if ( 2 != count( $query->query )
|| ! isset( $query->query['page'] ) )
return;
if ( ! empty( $query->query['name'] ) ) {
$query->set( 'post_type', array( 'news','post','services','area','metro' ) );
}
}
add_action( 'pre_get_posts', 'sh_parse_request' );
//убрать слаг из таксономий
Убрать слаг способ 2
//убрать слаг
// смена запроса
add_filter('request', 'true_smenit_request', 1, 1 );
function true_smenit_request( $query ){
$taxonomia_name = 'devices'; // укажите название таксономии здесь, это также могут быть рубрики category или метки post_tag
// запросы для дочерних элементов будут отличаться, поэтому нам потребуется дополнительная проверка
if( $query['attachment'] ) :
$dochernia = true; // эту переменную задаём для себя, она нам потребуется дальше
$urlyarlyk = $query['attachment']; // это ярлык данного термина/рубрики/метки
else:
$dochernia = false;
$urlyarlyk = $query['name']; // как видите, здесь ярлык хранится в другой переменной запроса
endif;
$termin = get_term_by('slug', $urlyarlyk, $taxonomia_name); // получаем элемент таксономии по ярлыку
if ( isset( $urlyarlyk ) && $termin && !is_wp_error( $termin )): // если такого элемента не существует, прекращаем выполнение кода
// для страниц дочерних элементов код немного отличается
if( $dochernia ) {
unset( $query['attachment'] );
$parent = $termin->parent;
while( $parent ) {
$parent_term = get_term( $parent, $taxonomia_name);
$urlyarlyk = $parent_term->slug . '/' . $urlyarlyk; // нам нужно получить полный путь, состоящий из ярлыка текущего элемента и всех его родителей
$parent = $parent_term->parent;
}
} else {
unset($query['name']);
}
switch( $taxonomia_name ): // параметры запроса для рубрик и меток отличаются от других таксономий
case 'category':{
$query['category_name'] = $urlyarlyk;
break;
}
case 'post_tag':{
$query['tag'] = $urlyarlyk;
break;
}
default:{
$query[$taxonomia_name] = $urlyarlyk;
break;
}
endswitch;
endif;
return $query;
}
// смена самой ссылки
add_filter( 'term_link', 'true_smena_permalink', 10, 3 );
function true_smena_permalink( $url, $term, $taxonomy ){
$taxonomia_name = 'devices'; // название таксономии, тут всё понятно
$taxonomia_slug = 'devices'; // ярлык таксономии - зависит от параметра rewrite, указанного при создании и может отличаться от названия,
// как например таксономия меток это post_tag, а ярлык по умолчанию tag
// выходим из функции, если указанного ярлыка таксономии нет в URL или если название таксономии не соответствует
if ( strpos($url, $taxonomia_slug) === FALSE || $taxonomy != $taxonomia_name ) return $url;
$url = str_replace('/' . $taxonomia_slug, '', $url); // если мы ещё тут, выполняем замену в URL
return $url;
}
//убрать слаг
Закажите у меня разработку сайта под ключ
и получите логотип в подарок в векторе и с исходниками
Заказать разработку
и получите логотип в подарок в векторе и с исходниками