web-dev-qa-db-fra.com

Suppression du slug parent de l'URL sur le type de publication personnalisé

Comme le titre l'indique, j'aimerais supprimer les slugs parents des URL d'un type de publication particulier: services.

Quelque chose qui changerait cela:

http://demo.com/parent-service/child-service-1
http://demo.com/grand-parent-service/parent-service/child-service-2
http://demo.com/great-grand-parent-service/grand-parent-service/parent-service/child-service-3
etc

Pour quelque chose comme ça:

http://demo.com/child-service-1
http://demo.com/child-service-2
http://demo.com/child-service-3
etc

Je préférerais ne pas utiliser de plugins supplémentaires pour accomplir cela. Je livre actuellement le CPT via un plugin, qui enregistre également une taxonomie personnalisée.

2
NW Tech

Lors d'un test rapide, j'ai été surpris de constater que cela fonctionne immédiatement. C'est-à-dire que l'URI canonique d'une publication enfant a toujours le parent dans le chemin, mais que la publication enfant fonctionne tout aussi bien sans elle (ne 404, ne redirige pas). En conséquence, il suffit de filtrer post_type_link pour que cela fonctionne comme vous le demandez! Le code suivant devrait faire exactement cela:

function wpse_101072_flatten_hierarchies( $post_link, $post ) {
    if ( 'service' != $post->post_type )
        return $post_link;

    $uri = '';
    foreach ( $post->ancestors as $parent ) {
        $uri = get_post( $parent )->post_name . "/" . $uri;
    }

    return str_replace( $uri, '', $post_link );
}
add_filter( 'post_type_link', 'wpse_101072_flatten_hierarchies', 10, 2 );
4
Matthew Boynes