it-swarm.com.de

Benutzerdefinierter Permalink - Taxonomienamen und Termnamen am Ende des Permalinks anhängen

Ich habe

custom post type -> resources
custom taxonomy  -> resources_type

Ich möchte benutzerdefinierte Permalinks, bei denen die Kategoriebasis am Ende anstatt an der Vorderseite angehängt wird

Zum Beispiel: Ich füge eine neue Ressource mit Titel "Erste Ressource" hinzu und ordne Begriff als Typ1 zu.

Was ich bekomme - http://example.com/resources/resources-type/type1/first-resource

Was ich will- http://example.com/resources/first-resource/resources-type/type1

Ich verwende den folgenden Argumentcode in der Art des Registrierungspostens:

'rewrite' => array("slug" => "/resources/resources-type/%resources_type%"),

Verwenden Sie dann den folgenden Code, um "% resources_type%" im obigen Code zu ersetzen

function wpa_course_post_link( $post_link, $id = 0 ){
  $post = get_post($id);  
  if ( is_object( $post ) ){
      $terms = wp_get_object_terms( $post->ID, 'resources_type' );
      if( $terms ){
        return str_replace( '%resources_type%' , $terms[0]->slug , $post_link );
      }
  }
  return $post_link;  
}
add_filter( 'post_type_link', 'wpa_course_post_link', 1, 3 );
2
user7459842

Sie können die folgende Permalink-Struktur erreichen, indem Sie einfach die Standardstruktur (die Sie angegeben haben) für den Post-Typ resources überschreiben (ohne sie entfernen zu müssen):

/resources/%resources%/resources-type/%resources_type% <- preferred
/resources/resources-type/%resources_type%/%resources% <- default

Und Sie können es über add_permastruct() - überschreiben. Registrieren Sie zuerst den Post-Typ, ohne den Parameter rewrite anzugeben. Dies bedeutet, dass das Umschreiben standardmäßig true/enabled lautet und der Slug resources ist (dh der Schlüssel oder Slug vom Typ Post ):

register_post_type( 'resources', array(
    'label' => 'Resources',
    'public' => true,
    // no need to set the 'rewrite' arg
    ...
) );

Überschreiben Sie anschließend die Permalink-Struktur wie folgt:

add_permastruct( 'resources', '/resources/%resources%/resources-type/%resources_type%' );

wo das Format ist - der wichtige Teil ist der {POST TYPE KEY}, der in Ihrem Fall resources ist:

add_permastruct( '{POST TYPE KEY}', '{PERMALINK STRUCTURE}' );

(Vergessen Sie nicht, die Umschreiberegeln zu löschen - besuchen Sie einfach die Permalink-Einstellungsseite.)

So deaktivieren Sie /resources/%resources%

/resources/%resources% (d. h. /{POST TYPE KEY}/%{POST TYPE KEY}%) wird automatisch hinzugefügt, wenn %{POST TYPE KEY}% in der Permalink-Struktur gefunden wird. Sie können es wie folgt entfernen:

add_filter( 'resources_rewrite_rules', 'filter_resources_rewrite_rules' );
function filter_resources_rewrite_rules( $rules ) {
    $pattern = 'resources/([^/]+)/resources-type/';
    $p_length = strlen( $pattern );

    foreach ( $rules as $regex => $query ) {
        if ( $pattern !== substr( $regex, 0, $p_length ) ) {
            unset( $rules[ $regex ] );
        }
    }

    return $rules;
}

Wenn der Beitragstyp hierarchisch ist, ist der $pattern eine resources/(.+?)/resources-type/.

Und wenn Sie den obigen Code/die obige Funktion mit einem anderen Beitragstyp verwenden möchten, müssen Sie im Grunde nur den Text " resources " durch den richtigen Beitragstyp key ersetzen.

Weitere Informationen zu diesem Filter finden Sie unter https://developer.wordpress.org/reference/hooks/permastructname_rewrite_rules/ .

1
Sally CJ