web-dev-qa-db-fra.com

Modèle de taxonomie de type poste personnalisé

J'ai créé une publication personnalisée de type portfolio et une taxonomy bien sûr.

function taxonomies_portfolio() {
    $labels = array(
        'name'              => _x( 'Portfolio categories', 'taxonomy general name' ),
        'singular_name'     => _x( 'Portfolio categories', 'taxonomy singular name' ),
        'search_items'      => __( 'Query portfolio categories' ),
        'all_items'         => __( 'All portfolio categories' ),
        'parent_item'       => __( 'Parent category' ),
        'parent_item_colon' => __( 'Parent category:' ),
        'edit_item'         => __( 'Edit portfolio category' ), 
        'update_item'       => __( 'Update portfolio category' ),
        'add_new_item'      => __( 'Add Edit portfolio category' ),
        'new_item_name'     => __( 'New portfolio category' ),
        'menu_name'         => __( 'Categories' ),
    );
    $args = array(
        'labels' => $labels,
        'hierarchical' => true,
        'rewrite' => true
    );
    register_taxonomy( 'portfolio_category', 'portfolio', $args );
}
add_action( 'init', 'taxonomies_portfolio', 0 );

Est-il possible de créer 1 fichier de modèle pour afficher tous les éléments d’une même catégorie? J'ai essayé de créer un taxonomy.php mais sans succès. Quel est le nom de modèle correct à utiliser?

2
p2or

Selon la page Codex Wordpress sur Hiérarchie des modèles , vous créez un fichier de modèle portant le nom taxonomy-portfolio_category.php. WordPress l'utilisera pour afficher l'archive de cette taxonomie. Vous pouvez également utiliser taxonomy-portfolio_category-{term_name}.php pour créer des modèles pour des termes spécifiques dans votre taxonomie.

3
Manny Fleurmond

Il n'est pas nécessaire d'utiliser les tempates standard WordPress pour gérer les modèles de plusieurs taxonomies pour le même type d'article personnalisé.

Supposons que vous ayez votre: 1) portfolio CPT avec la taxonomie 1) pcat et 3) les termes 'sites', 'apps' et 'design' créés dans cette taxonomie (ici les slugs sont affichés).

Cas 1: Vous voudrez peut-être afficher le même modèle pour l’une de ces taxonomies pcat. Utilisez simplement le même modèle portfolio-signle.php unique avec le code qui affiche chaque enregistrement portfolio de manière uniforme.

Cas 2: Supposons maintenant que vous souhaitiez afficher un modèle différent pour chaque enregistrement portfolio CPT en fonction du terme de taxonomie pcat ("sites", "applications", "conception", "peu importe") attribué à cet enregistrement.

Vous pouvez le faire en utilisant toujours le même portfolio-signle.php avec un modèle partiel supplémentaire pour chaque terme pcat.

Votre portfolio-signle.php doit contenir ce code:

<?php
get_header();
// Here you get the particular record of the `portfolio` CPT.
global $post;
// Get the array of 'pcat' taxonomy terms attached to the record
// and take the slug of first term only (just for brevity)
$txslug = get_the_terms($post, 'pcat')[0]->slug;
// Dynamically prepare the file name
$filename = get_template_directory() . '/partials/_portfolio-single-'.$txslug.'.php';
// Check if the file exists & readable
if (is_readable($filename)) {
    // The case when you  created the sub-template partial for the particular `pcat` term.
    include get_template_directory() . '/partials/_portfolio-single-'.$txslug.'.php';
} else {
    // The case for all other `pcat` taxonomy terms.
    include get_template_directory() . '/partials/_portfolio-single-other.php';
}
get_footer();

Comme vous le voyez dans le code ci-dessus, vous devrez créer les sous-modèles partiels respectifs pour chaque terme de taxonomie pcat que vous affectez à vos publications et qui gèreront réellement l'apparence du terme de taxonomie.

Ou/et créez le /partials/portfolio-single-other.php pour gérer tous les termes pour lesquels vous souhaitez avoir une apparence uniforme.

Cela gardera vos fichiers de thèmes bien organisés et, sans aucun coût en code, vous permettra de gérer de manière flexible l'apparence des différents termes de taxonomie '.

NB: N'oubliez pas de re-déclarer global $post; en haut de vos modèles '/partials/_portfolio-single-'.$txslug.'.php'. Vous obtiendrez l'accès à l'objet CPT que vous souhaitez afficher sans aucun coût supplémentaire.

0
bob-12345