При создании собственного типа публикации в WordPress, вы получите ЧПУ, содержащий в самом начале название этого типа материала. Можно ли избавиться от этого?
К примеру, вы зарегистрировали тип публикации portfolio:
1 2 3 4 5 6 7 8 9 10 11 12 |
$args = array( 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => true, 'capability_type' => 'post', 'supports' => array(...), 'labels' => array(...), ... ); register_post_type('portfolio', $args); |
После этого ЧПУ данных статей будет начинаться с /portfolio/[название статьи].
Избавиться от данного префикса не получится, но можно его изменить. Самое простое — поменять название типа публикации. Второй метод — указать в параметре rewrite — желаемый ‘slug’.
К примеру,
1 2 3 4 5 6 |
$args = array( ... 'rewrite' => array('slug' => 'article-prefix'), ... ); register_post_type('portfolio', $args); |
Изменит URI на /article-prefix/[название статьи].
После смены настроек статьи могут перестать открываться, попробуйте пересохранить настройки /wp-admin/options-permalink.php, обычно помогает.
Post_type_link hook
Есть у WP возможность зацепиться к генерации permalink-а. Обычно данный фильтр используют для подстановки в URI какого либо шаблона.
К примеру,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$args = array( ... 'rewrite' => array('slug' => '%my-pattern%'), ... ); register_post_type('portfolio', $args); // Цепляем фильтр add_filter('post_type_link', 'portfolio_permalink', 1, 2); // Реализация фильтра function portfolio_permalink( $permalink, $post) { if ($post->post_type == 'portfolio') { $newvalue = ...; $permalink = str_replace('%my-pattern%', $newvalue, $permalink); } // в любом случае надо вернуть значение return $permalink; } |
На входе функция получает полное значение URL статьи и объект публикации.
Казалось бы можно взять и убрать подстановочный шаблон вместе с предваряющим его «слешем». К сожалению, такой трюк не сработает. :)