Как создавая кастомный тип записи получить ссылку формата (site.ru/taxonomy_term_name/post_name)?

Какая должна быть иерархия файлов в теме Wordpress, чтобы задав список категорий в кастомном типе записи, и публикуя посты соотнося их к разным категориям в итоге при заходе на пост с сайта, ссылка поста имел такой вид: http://название сайта/название категории/название поста
taxonomy.php не подходит как я понимаю.
  • Вопрос задан
  • 1470 просмотров
Решения вопроса 1
@PRC Автор вопроса
Пользуясь материалом с сайта wp-kama.ru/function/register_post_type

#2 Добавление элемента таксономии в ЧПУ
Для нового типа записи можно указать разные ЧПУ с помощью параметра rewrite. Этот пример показывает, как добавить в ЧПУ нового типа записи таксономию.

Допустим, мы регистрируем типа записи catalog и таксономию products для него. Далее, нам нужно чтобы при публикации записи и выборе для нее элемента таксономии. Этот элемент добавлялся в ЧПУ и в результате ссылка на тип записи выглядела так:
site.ru/taxonomy_term_name/post_name.

Для этого нужно указать аргумент slug в параметре rewrite при регистрации типа записи:

'rewrite' => array( 'slug'=>'/%products%', 'with_front' => false ),

Теперь нужно добавить хук, чтобы заменять %products% при получении ссылки на запись через функцию get_permalink() и производные от нее функции:

## Отфильтруем ЧПУ произвольного типа
// сам фильтр: apply_filters( 'post_type_link', $post_link, $post, $leavename, $sample );
add_filter('post_type_link', 'products_permalink', 1, 2);

function products_permalink( $permalink, $post ){
	// выходим если это не наш тип записи: без холдера %products%
	if( strpos($permalink, '%products%') === FALSE )
		return $permalink;

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

	return str_replace('%products%', $taxonomy_slug, $permalink );
}


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

http://название сайта/название категории/название поста
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы