Jak przepisać URI niestandardowego typu postu?

16

Witryna, nad którą pracuję, wykorzystuje następującą „ładną” strukturę bezpośredniego łącza:

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

Ale w przypadku niestandardowego typu postu mój klient chciałby uniknąć „ładnego” ślimaka:

http://example.com/product/142

Jak można użyć identyfikatora postu zamiast ślimaka dla niestandardowego typu postu?

Wierzę, że może to być możliwe przy użyciu WP_Rewrite, ale nie wiem od czego zacząć.

Lea Hayes
źródło

Odpowiedzi:

33

To jest to, czego używam do przepisywania adresów URL niestandardowych typów postów z identyfikatorem postu. Potrzebujesz reguły przepisywania, aby tłumaczyć żądania adresów URL, a także filtru, post_type_linkaby zwrócić poprawne adresy URL dla wszelkich wywołań do 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
źródło
Cześć @milo, to działa dla mnie idealnie ... ale chcę wprowadzić pewne zmiany, czy możesz mnie poprowadzić
deemi-D-nadeem