web-dev-qa-db-fra.com

Essayer de gérer les modèles sur un blog avec de nombreuses taxonomies personnalisées

Dans mon projet le plus récent, je m'occupe d'un site Web qui comprend des dizaines de taxonomies personnalisées, quelques types d'articles, le contenu, etc., et requiert des modèles différents pour différents auteurs ou tags.

À l'heure actuelle, mon dossier de modèles contient environ 70 fichiers php pour les modèles, ce qui est vraiment déroutant.

J'ai remarqué que certains thèmes tels que vingt-sept parviennent à stocker des fichiers de modèle dans des dossiers et les appellent en boucle de la manière suivante:

get_template_part( 'template-parts/post/content', get_post_format() );

Mais c'est dans la boucle. Mes modèles sont entièrement différents, je ne peux donc pas utiliser la solution ci-dessus, car je devrai utiliser des conditions pour modifier tout ce qui ne fait pas partie de la boucle.

Par exemple, si j'ai 3 types de publication, je dois enregistrer 3 fichiers de modèle:

single-type1.php, single-type2.php et single-type3.php.

Ces modèles sont totalement différents, à la fois dans et en dehors de la boucle (même des barres latérales différentes), donc je ne peux pas simplement créer un single.php et appeler le type de message approprié dans la boucle.

Faut-il quand même aborder WordPress à propos de fichiers de modèles personnalisés autres que de simplement les enregistrer directement dans le dossier du thème?

1
Jack Johansson

Les modèles de page peuvent être stockés dans le sous-répertoire page-templates ou templates au sein d'un thème, mais cela ne s'applique pas aux modèles de type publication personnalisé ou de taxonomie.

Heureusement, le filtre template_include peut être utilisé pour changer le modèle qui sera chargé. Dans l'exemple ci-dessous, les fichiers de modèle sont stockés dans le répertoire /theme-name/templates/.

/**
 * Filters the path of the current template before including it.
 * @param string $template The path of the template to include.
 */
add_filter( 'template_include', 'wpse_template_include' );
function wpse_template_include( $template ) {
    // Handle taxonomy templates.
    $taxonomy = get_query_var( 'taxonomy' );
    if ( is_tax() && $taxonomy ) {
        $file = get_theme_file_path() . '/templates/taxonomy-' . $taxonomy . '.php';
        if ( file_exists( $file ) ) {
            $template = $file;
        }           
    }


    // Handle post type archives and singular templates.
    $post_type = get_post_type();
    if ( ! $post_type ) {
        return $template;
    }

    if ( is_archive() ) {
        $file = get_theme_file_path() . '/templates/archive-' . $post_type . '.php';
        if ( file_exists( $file ) ) {
            $template = $file;
        }
    }

    if ( is_singular() ) {
        $file = get_theme_file_path() . '/templates/single-' . $post_type . '.php';
        if ( file_exists( $file ) ) {
            $template = $file;
        }
    }

    return $template;
}
2
Dave Romsey

Vous pouvez utiliser 1 modèle pour toutes les taxonomies et nommez-le taxonomy.php ou utilisez template_include dans votre fichier de fonctions.

add_filter( 'template_include', 'tax_page_template', 99 );

function tax_page_template( $template ) {

    if ( is_tax( 'taxonomy' )  ) {
        $new_template = locate_template( array( 'your-tax.php' ) );
        if ( '' != $new_template ) {
            return $new_template ;
        }
    }

    return $template;
}

En fonction du thème utilisé, vous pouvez également utiliser un modèle dans le menu déroulant Attributs de page> Modèles et modifier chaque modèle à l'aide des paramètres de thème.

2
Dev