Wie der Titel besagt, möchte ich übergeordnete Slugs aus URLs für einen bestimmten Beitragstyp entfernen: Dienste.
Etwas, das dies ändern würde:
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
Auf so etwas:
http://demo.com/child-service-1
http://demo.com/child-service-2
http://demo.com/child-service-3
etc
Ich würde lieber keine zusätzlichen Plugins verwenden, um dies zu erreichen. Ich liefere das CPT derzeit über ein Plugin aus, das auch eine benutzerdefinierte Taxonomie registriert.
In einem kurzen Test war ich überrascht, dass dies sofort funktioniert. Das heißt, in der kanonischen URI für einen untergeordneten Beitrag befindet sich immer noch der übergeordnete Teil im Pfad, aber der untergeordnete Beitrag funktioniert auch ohne diesen (nicht 404, nicht umleiten). Infolgedessen sollte es nur darum gehen, post_type_link
zu filtern, damit dies so funktioniert, wie Sie es wünschen! Der folgende Code sollte genau das tun:
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 );