wake-up-neo.net

Entfernen des übergeordneten Slugs aus der URL bei benutzerdefiniertem Beitragstyp

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.

2
NW Tech

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 );
4
Matthew Boynes