@m4son

Как при запросе страницы отобразить другую страницу?

У меня такая логика отображения:
если slug категории = slug записи, то отобразить страницу записи при запрос рубрики (то есть url рубрики, а показывает запись)
И раньше так и было, но после какого-то обновления это сломалось. Как сделать чтобы работала такая логика отображения контента?
  • Вопрос задан
  • 28 просмотров
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Это достаточно тяжелый запрос. Вам нужно получить все посты, проверить, что среди них есть пост, соответствующий слагу текущей категории и потом получить url записи для редиректа

add_action( 'template_redirect', 'redirect_to_post_in_category' );
function redirect_to_post_in_category() {

	// Проверяем, что находимся в категории.
	if ( is_category() ) {
		$slugs = array();
		$posts = get_posts();

		// Собираем массив всех слагов постов.
		foreach ( $posts as $key => $post ) {
			$slugs[ $post->ID ] = $post->post_name;
		}

		// Проверяем, что слаг текущей категории есть в массиве постов.
		if ( in_array( get_queried_object()->slug, $slugs, true ) ) {
			$slugs   = array_flip( $slugs ); // Меняем местами ключи и значения в массиве постов.
			$post_id = $slugs[ get_queried_object()->slug ]; // Ищем ID постав в массиве по слагу.
			$url     = get_permalink( $post_id ); // Получаем url записи по ID.

			// Если url существует — делаем редирект.
			if ( $url ) {
				wp_redirect( $url, 301 );
			}
		}
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы