ID поста вместо имени (ярлыка) в ЧПУ для типа записи — «тип_записи/ID»
Допустим, при регистрации типа записи orders с помощью register_post_type() параметр rewrite = false - правила перезаписи не создаются и их нужно создать вручную.
URL должен выглядеть как example.com/orders/123, где 123 - ID записи.
add_action( 'init', function(){
// создам правила ЧПУ
add_rewrite_tag( '%order_id%', '([0-9]+)', "post_type=orders&p=" );
// или можно так
// создам правила ЧПУ - тут 'order/([0-9]+)/?$' полностью совпадает с тем что
// создало бы add_permastruct() и поэтому заменяет...
//add_filter( 'orders'.'_rewrite_rules', function( $rules ){
// return array( 'order/([0-9]+)/?$' => 'index.php?post_type=orders&p=$matches[2]' );
//} );
// регистрируем структуру для типа записи
add_permastruct( 'orders', 'order/%order_id%', array(
'with_front' => false,
'paged' => false,
'feed' => false,
'forcomments' => false,
'walk_dirs' => false,
'endpoints' => false,
));
// заменим тег в URL на ID
add_filter( 'post_type_link', 'orders_permalink', 1, 2 );
function orders_permalink( $permalink, $post ){
if( false === strpos($permalink, '%order_id%') ){
return $permalink;
}
return str_replace( '%order_id%', $post->ID, $permalink );
}
} );—
Заметка встроена в: WP_Rewrite{}