WordPress как на ладони
Мощный и не дорогой хостинг от Fornex.com

Проблема с ЧПУ

При создание custom_post_type нужно сделать ЧПУ без указания в ссылке /%post_type%/
Вся проблема в том что post_type 'hierarchical' => true

Часть создания пост тайпа

if ( ! function_exists( 'service_type' ) ) {

// Опишем требуемый функционал
	function service_type() {

		$labels = array(
			'name'                => _x( 'Услуги', 'Post Type General Name', 'biz' ),
			'singular_name'       => _x( 'Услуги', 'Post Type Singular Name', 'biz' ),
			'menu_name'           => __( 'Услуги', 'biz' ),
			'parent_item_colon'   => __( 'Родительский:', 'biz' ),
			'all_items'           => __( 'Все', 'biz' ),
			'view_item'           => __( 'Просмотреть', 'biz' ),
			'add_new_item'        => __( 'Добавить новую', 'biz' ),
			'add_new'             => __( 'Добавить новую', 'biz' ),
			'edit_item'           => __( 'Редактировать', 'biz' ),
			'update_item'         => __( 'Обновить', 'biz' ),
			'search_items'        => __( 'Найти', 'biz' ),
			'not_found'           => __( 'Не найдено', 'biz' ),
			'not_found_in_trash'  => __( 'Не найдено в корзине', 'biz' ),
		);
		$args = array(
			'labels'              => $labels,
			'hierarchical'        => true,
			'supports'            => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'page-attributes'),
			'public'              => true,
			'menu_position'       => 7,
			'menu_icon'           => 'dashicons-media-text',
			'has_archive'         => true,
			'rewrite'             => false,
			'taxonomies'          => array( 'model' )
		);
		register_post_type( 'service', $args );

	}

	add_action( 'init', 'service_type', 0 ); // инициализируем
}

Часть фильтрации url

function true_post_type_rewrite() {
	global $wp_rewrite;
	// в данном случае мой тип записей был - Услуги (service)
	// этот код позволит перезаписать урлы
	// параметры add_rewrite_tag('%название_тега%', '%маска_символов%', '%url_параметр%')
	$wp_rewrite->add_rewrite_tag("%service%", '([^/]+)', "service=");
	$wp_rewrite->add_permastruct('service', '%service%');
}
add_action( 'init', 'true_post_type_rewrite');

function true_rewrite_conflicts( $request ) {
	if(!is_admin())
		$request['post_type'] = array('service', 'post', 'page'); // перечисляем типы записей с подобной структурой пермалинков
	return $request;
}
add_filter( 'request',  'true_rewrite_conflicts' );

Всё работает до 3-го уровня вложенности например
/yuridicheskie-uslugi/registratsiya-biznesa/registratsiya-ao/
Ссылка не работает и выпадает в 404 в тоже время
?service=yuridicheskie-uslugi/registratsiya-biznesa/registratsiya-ao отрабатывает
А все страницы до 3-го уровня вложенности также работают в нормальном режиме.

Хоть убей не могу понять в чем причина.

0
10 месяцев назад

Нет ответов на этот вопрос.

    На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация