Задать вопрос
kiselev-webmaster
@kiselev-webmaster

Как из урл архивной страницы убрать slug таксономии?

Приветствую! создал пользовательскую таксономию через плагин cptui. теперь есть архивная страница site/taxonomy_slug/term_slug необходимо из ссылки убрать слаг таксономии, чтобы ссылка стала такого вида: site/taxonomy_slug/term_slug -> site/term_slug. Знаю, что в cptui есть отдельная настройка этого, но почему то тогда все архивные страницы в урл теряют taxonomy_slug, а мне нужно только для этой кастомной таксономии.
Подскажите пожалуйста, как возможно программно это реализовать?
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
kiselev-webmaster
@kiselev-webmaster Автор вопроса
сам решил задачку. решение:
add_filter( 'events_group_rewrite_rules', 'namespace_events_group_rewrite_rules' );
function namespace_events_group_rewrite_rules( array $rules ): array {
	$terms = get_terms(
		[
			'taxonomy'   => 'events_group',
			'hide_empty' => false,
		]
	);
	$slugs         = wp_list_pluck( $terms, 'slug' );
	$slugs_pattern = '(' . implode( '|', array_unique( $slugs ) ) . ')';

	$new_rules = [];
	foreach ( $rules as $pattern => $query ) {
		$pattern               = str_replace( 'events_group/([^/]+)', $slugs_pattern, $pattern );
		$new_rules[ $pattern ] = $query;
	}
	return $new_rules;
}

add_filter( 'term_link', 'namespace_events_group_term_link', 10, 3 );
function namespace_events_group_term_link( string $termlink, \WP_Term $term, string $taxonomy ): string {
	if ( 'events_group' === $taxonomy ) {
		$termlink = str_replace( 'events_group/', '', $termlink );
	}
	return $termlink;
}

везде "events_group" замените на свою таксономию. Удачи)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Можно выкинуть плагин cptui и написать регистрацию таксономии руками с помощью функции register_taxonomy(), в нее вы можете передать все необходимые вам параметры
Ответ написан
Ваш ответ на вопрос

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

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