web-dev-qa-db-fra.com

Type de poste personnalisé Wordpress permalien: website.com/nom-post/id-post

J'essaie de créer un permalien personnalisé dans wordpress pour mon type de message personnalisé artikelen (slug exacte). J'ai trouvé du code en ligne et il semble que le travail consiste à transformer les liens avec une structure personnalisée %postname%/%postid%, mais lorsque je sauvegarde mes permaliens et que je vais à une page de détail, une erreur 404 s'affiche.

Je poste mon code pour démontrer ma façon de travailler.

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

function wpse33551_post_type_link( $link, $post = 0 ){
    if ( $post->post_type == 'artikelen' ){
        return home_url( $post->post_name .'/'. $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=artikelen&p=$matches[1]',
        'top' );
}
1
product/([0-9]+)?$

se traduit parproduct/ suivi d'un nombre ou de rien (et de rien d'autre, pas même d'une barre oblique). Cela ne ressemble pas à ce que vous voulez réaliser.

Au lieu de cela, essayez ce qui suit

function wpse33551_rewrites_init(){
    add_rewrite_rule(
        '^([^/]+)/([0-9]+)/?$',
        'index.php?post_type=artikelen&p=$matches[2]',
        'top'
    );
}

qui se traduit par :

  • ^ début de la chaîne (c.-à-d. qu'il n'y a rien d'autre devant)
  • ([^/]+): au moins un caractère qui n'est pas /
  • /: une barre oblique
  • ([0-9]+): au moins un numéro
  • /?: zéro ou un (fin) barre oblique
  • $: fin de la chaîne
1
kero