web-dev-qa-db-fra.com

Créer un modèle séparé pour la taxonomie personnalisée partagée avec des termes partagés

enter image description hereJ'ai créé une taxonomie personnalisée appelée "product_category", elle a été partagée avec le type de publication "livres" et "films".

J'ai donc besoin de créer un modèle différent pour les deux types de publication.

La conception des deux modèles sera différente, il est donc important que la taxonomie partagée de post_type (même leurs termes soient partagés dans les deux types de post_type.) Ait un modèle différent.

Le chemin devrait être comme: -

site/livres/catégorie_produit/horreur /

site/movies/product_category/horror /

2
user2506619

Voir, il est assez difficile d'avoir un chemin comme

site/livres/catégorie_produit/horreur /

site/movies/product_category/horror /

Comme les fonctionnalités de wordpress entreront en conflit entre custom_post_type et leur taxonomie si vous essayez de conserver l’URL telle que vous l’avez mentionnée. Je vous suggère de considérer le je mentionné ci-dessous comme une solution à votre problème.

site/catégorie_produit/horreur /? post_type = livres

site/catégorie_produit/horreur /? post_type = films

Maintenant, pour conserver le modèle selon les termes partagés, créez deux modèles dans votre répertoire de thèmes.

  • book-term-books.php
  • common-term-movies.php

Et, utilisez ce code pour rediriger vers un modèle sur la base d'un type de publication personnalisé:

add_filter( 'template_include', 'wpse_152146_template_override', 99 );
function wpse_152146_template_override(){
    if (is_tax()) {
        if ( 'books' == $_GET['post_type']) {

            $new_template = locate_template( array( 'common-term-books.php' ) );
            if ( '' != $new_template ) {
                return $new_template ;
            }

        }
        elseif ( 'movies' == $_GET['post_type']) {

            $new_template = locate_template( array( 'common-term-movies.php' ) );
            if ( '' != $new_template ) {
                return $new_template ;
            }

        }
        else
            return $template;
    }
    else
        return $template;
}

De plus, vous pouvez également utiliser la fonction custom_term_link créée pour obtenir l’URL sur la base de post_type.

function get_custom_term_link( $term, $taxonomy, $post_type ){
    $link = get_term_link( $term, $taxonomy );
    return $link.'?post_type='.$post_type;
}

get_custom_term_link( 'horror', 'product_category', 'books');

N'oubliez pas de créer un fichier modèle common-term-books.php & common-term-movies.php . Sinon, il ne restera plus qu'à afficher un écran blanc.

1
Abhineet Verma