it-swarm.com.de

Taxonomie-Slug in URL einbeziehen?

Ich habe die folgenden benutzerdefinierten Einstellungen für Post-Type und Taxonomie:

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'system',
        array(
            'labels' => array(
                'name' => __( 'Systems' ),
                'singular_name' => __( 'System' )
            ),
        'capability_type' => 'post',
        'supports' => array('title','editor','comments'),   
        'public' => true,
        'has_archive' => true,
        'rewrite' => array( 'slug' => 'system' ),
        )
    );
}

function news_init() {
    register_taxonomy(
        'system',
        'system',
        array(
            'label' => __( 'Product Category' ),
            'sort' => true,
            'hierarchical' => true,
            'args' => array( 'orderby' => 'term_order' ),
            'rewrite' => array( 'slug' => 'product-category' )
        )
    );  
}
add_action( 'init', 'news_init' );

Ist es möglich, den benutzerdefinierten Taxonomienamen in die URL aufzunehmen?

Gegenwärtig sieht die URL bei einem benutzerdefinierten Post so aus:

http: //www.domain/product-category/ (post-name)/

Wie kann ich es so aussehen lassen?

http: //www.domain/ (category-slug)/(post-name)/

2
Rob

Dies kann für WordPress eine Herausforderung sein, da es nicht weiß, ob Sie sich auf einen Beitrag, eine Seite oder eine Taxonomie beziehen. Benennen Sie Ihre Taxonomie dennoch in product_category um, und versuchen Sie, den Slug in Ihren Post-Typ-Argumenten in system/%product_category% und Ihre Taxonomie-Argumente in system zu ändern. WordPress sollte jetzt mit /system/your-product-category/post-name/ umgehen

Standardmäßig erkennt WordPress das Permalink-Struktur-Tag% product_category% nicht, daher müssen wir es deklarieren:

function filter_post_type_permalink($link, $post)
{
    if ($post->post_type != 'system')
        return $link;

    if ($cats = get_the_terms($post->ID, 'product_category'))
        $link = str_replace('%product_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_permalink', 10, 2);

ANMERKUNGEN:

  1. Dadurch wird nur die erste Produktkategorie für den nach Namen geordneten Beitrag abgerufen.
  2. Es kann immer noch 404 Fehler geben, wenn Seiten, Beiträge usw. den gleichen Namen haben.
1
Daniel Sachs

Dies ist, was ich lokal getestet habe und es zeigt den Taxonomietypnamen an, den Sie auf der Einstellungsseite erstellt haben, die der Code im Permalink auf Taxonomiearchivseiten hinzufügt.

add_action( 'init', 'wpsites_create_custom_taxonomy_types' );
function wpsites_create_custom_taxonomy_types() {

register_taxonomy( 'system-type', 'system',
    array(
        'labels' => array(
            'name'          => _x( 'Types', 'taxonomy general name', 'wpsites' ),
            'add_new_item'  => __( 'Add New System Type', 'wpsites' ),
            'new_item_name' => __( 'New System Type', 'wpsites' ),
        ),
        'exclude_from_search' => true,
        'has_archive'         => true,
        'hierarchical'        => true,
        'rewrite'             => array( 'slug' => 'system-type', 'with_front' => false ),
        'show_ui'             => true,
        'show_tagcloud'       => false,
    ));

}



add_action( 'init', 'wpsites_system_custom_post_type' );
function wpsites_system_custom_post_type() {

register_post_type( 'system',
    array(
        'labels' => array(
            'name'          => __( 'System', 'wpsites' ),
            'singular_name' => __( 'System', 'wpsites' ),
        ),
        'has_archive'  => true,
        'hierarchical' => true,
        'menu_icon'    => 'dashicons-admin-network',
        'public'       => true,
        'rewrite'      => array( 'slug' => 'system', 'with_front' => false ),
        'supports'     => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'revisions', 'page-attributes' ),
        'taxonomies'   => array( 'system-type' ),

    ));

}
0
Brad Dalton

Zuallererst VERWENDEN SIE NICHT GLEICHES POST TYPE & TAXONOMY . Tatsächlich müssen Sie nicht einmal eine Taxonomie registrieren, da Sie eine Kategorie benötigen. Verwenden Sie den folgenden Code:

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'system',
        array(
            'labels' => array(
                'name' => __( 'Systems' ),
                'singular_name' => __( 'System' )
            ),
        'capability_type' => 'post',
        'supports' => array('title','editor','comments'),   
        'public' => true,
        'has_archive' => true,
        'rewrite' => array( 'slug' => '%category%' ),
        'taxonomies' => array('category')
        )
    );
}

Jetzt stehen Ihnen Kategorien zur Verfügung, die Sie für Ihren Beitragstyp "System" verwenden können. Beachten Sie auch, dass ich den Wert von Schnecke geändert habe. Jetzt schließen Sie das nächste Mal den Filter post_type_link an, um '% category%' durch den Slug of category zu ersetzen. Verwenden Sie den folgenden Code:

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

Der obige Code ersetzt% category% durch den von Ihnen gewünschten Slug of Category. Sie können den Code mit benutzerdefinierter Taxonomie verwenden. Verwenden Sie jedoch nicht "system" sowohl für den Beitragstyp als auch für die Taxonomie.

0
Fiaz Husyn