Как переписать URI пользовательского типа записи?

16

Сайт, над которым я работаю, использует следующую «красивую» структуру постоянных ссылок:

http://example.com/blog/my-special-post

Но для пользовательского типа поста мой клиент хотел бы избежать "симпатичного" слизняка:

http://example.com/product/142

Как можно использовать идентификатор сообщения вместо слага для пользовательского типа сообщения?

Я считаю, что это может быть возможно с помощью WP_Rewrite, но я не знаю, с чего начать.

Леа Хейс
источник

Ответы:

33

Это то, что я использую, чтобы переписать URL-адреса пользовательских типов записей с идентификатором записи. Вам нужно правило перезаписи для перевода запросов URL, а также фильтр post_type_linkдля возврата правильных URL для любых вызовов get_post_permalink():

add_filter('post_type_link', 'wpse33551_post_type_link', 1, 3);

function wpse33551_post_type_link( $link, $post = 0 ){
    if ( $post->post_type == 'product' ){
        return home_url( 'product/' . $post->ID );
    } else {
        return $link;
    }
}

add_action( 'init', 'wpse33551_rewrites_init' );

function wpse33551_rewrites_init(){
    add_rewrite_rule(
        'product/([0-9]+)?$',
        'index.php?post_type=product&p=$matches[1]',
        'top' );
}
Milo
источник
Привет @milo, это отлично работает для меня ... но я хочу внести некоторые изменения, пожалуйста, не могли бы вы мне
помочь