3 февраля 2020 WordPress
При создании произвольного типа записей, в WordPress автоматически добавляется префикс с его именем в URL, например www.site.ru/prefix/zapis/
. Изменить его можно в параметре rewrite
. А вот чтобы полностью удалить, можно воспользоваться приведенным в этой статье хаком.
Для начала удаляем параметр rewrite
, а лучше устанавливаем его в false
в функции создания кастомного типа записи register_post_type()
, обычно она находится в файле functions.php вашей темы.
Затем в этом же файле добавляем несколько функций:
function it-blog_post_type_rewrite() { global $wp_rewrite; // изменить portfolio на ваш тип записи $wp_rewrite->add_rewrite_tag("%portfolio%", '([^/]+)', "portfolio="); $wp_rewrite->add_permastruct('portfolio', '%portfolio%' ); } add_action( 'init', 'it-blog_post_type_rewrite');
function it-blog_rewrite_conflicts( $request ) { if(!is_admin()) $request['post_type'] = array('portfolio', 'post', 'page'); // вместо portfolio ваш тип записи return $request; } add_filter( 'request', 'it-blog_rewrite_conflicts' );
Теперь идем в Настройки → Постоянные ссылки, выбираем Название записи.
Можно попробовать оставить настройки как и были и просто пересохранить. Но были случаи, что без выбора Название записи хак не работал.
В моем случае все заработало, кроме главной страницы, она перестала отображаться. При чем проверки функциями WP is_front_page()
и is_home()
не срабатывали. Пришлось дописать проверку так $_SERVER['REQUEST_URI'] != '/'
В итоге получился следующий код:
function it-blog_rewrite_conflicts( $request ) { if(!is_admin() && $_SERVER['REQUEST_URI'] != '/') $request['post_type'] = array('portfolio', 'post', 'page'); // вместо portfolio ваш тип записи return $request; } add_filter( 'request', 'it-blog_rewrite_conflicts' );