web-dev-qa-db-fra.com

Inclure la taxonomie dans l’url?

J'ai la configuration de taxinomie personnalisée post-type et personnalisée suivante:

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' );

Est-il possible d'inclure le nom de taxonomie personnalisé dans l'URL?

À l'heure actuelle, lorsque je vais dans un message personnalisé, l'URL ressemble à ceci:

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

Comment puis-je lui donner l'aspect suivant?

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

2
Rob

Cela peut être un peu difficile pour WordPress, car il ne sait pas si vous faites référence à post, page ou taxonomie. Néanmoins, renommez votre taxonomie en quelque chose comme product_category et essayez de remplacer le slug dans vos arguments de type de publication par system/%product_category% et slug dans vos arguments de taxonomie en juste system. WordPress devrait maintenant gérer /system/your-product-category/post-name/

WordPress ne reconnaît pas immédiatement la balise de structure permalien% product_category%. Nous devons donc la déclarer:

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);

REMARQUES:

  1. Il s'agira simplement de saisir la première catégorie de produits pour le poste commandé par nom.
  2. Il peut toujours y avoir quelque 404 erreurs si les pages, les articles, etc. ont le même nom.
1
Daniel Sachs

C’est ce que j’ai testé localement et il affiche le nom du type de taxonomie que vous avez créé dans la page des paramètres que le code ajoute dans le permalien des pages d’archive taxonomie.

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

Tout d’abord NE PAS UTILISER MEME POST TYPE & TAXONOMIE , En fait, vous n’avez même pas besoin d’enregistrer une taxonomie puisque vous avez besoin d’une catégorie. Utilisez le code suivant:

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')
        )
    );
}

Vous aurez maintenant des catégories disponibles pour une utilisation avec votre type d'article "système". Notez également que j'ai changé la valeur de slug. Maintenant, avec le filtre post_type_link , ceci est utilisé pour remplacer "% category%" par le slug de catégorie. Utilisez le code suivant:

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 );

Le code ci-dessus avec remplace% category% par le slug de catégorie que vous souhaitez. Vous pouvez utiliser le code avec une taxonomie personnalisée, mais n'utilisez pas 'système' pour le type de publication et la taxonomie.

0
Fiaz Husyn