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{}