web-dev-qa-db-fra.com

Structure de modèle

Question concernant la structure du modèle:

Dans une boucle personnalisée, j'ai inséré un get_template_part ('resources', 'layout') qui contient le balisage suivant:

<div class="custom-content">
    <?php if ( get_post_type() === 'videos' ) { ?>
        <div class="video-popup">
            <?php the_field('video_popup'); ?>
        </div>
    <?php } else { ?>
        <div class="featured-image">
            <?php the_post_thumbnail('full'); ?>
            <?php if ( get_post_type() === 'articles' ) { ?>
                <p class="custom-content-btn">
                    <a href="<?php the_field( 'article_link' )?>" class="btn btn-primary" target="_blank"><?php echo __('READ'); ?></a>
                </p>
            <?php } ?> 
        </div>
        <?php if ( get_post_type() === 'audio' ) { ?>
        <div class="audio-content">
            <?php the_field('audio_clip'); ?>
        </div>
        <?php } ?>
    <?php } ?>
</div>

J'ai 3 CPT (vidéos, audio et articles). Cependant, je ne suis pas sûr que ce soit le meilleur moyen d’afficher le contenu de manière conditionnelle; semble un peu brouillon. Je suppose que la partie délicate est qu’un balisage apparaît pour tous les CPT, entre ces balisages conditionnels.

Qu'est-ce qui serait considéré comme la "meilleure pratique" pour s'attaquer à ce problème? Apprécier n'importe quelle entrée!

1
Edmund Chan

Vous avez dit que vous êtes dans une boucle personnalisée qui renvoie différents types de post_types:

//.....
 while ( $loop->have_posts() ) : $loop->the_post(); 
   get_template_part($post->post_type,'layout');
endwhile;

de cette façon, vous n'utilisez pas de conditionnels supplémentaires et vous vous reposez sur get_template_part (). Vous avez simplement besoin de fichiers différents post_type1-layout.php, post_type2-layout.php, etc. dans le dossier racine de votre thème theme/child en conservant les modèles séparés, plus propres et plus utilisables.

Vous pouvez également placer les fichiers de modèle dans un sous-dossier customTemplates et utiliser

get_template_part('customTemplates/'.$post->post_type,'layout');
0
Andrea Somovigo

Il n'y a pas de meilleure pratique, mais si vous examinez les thèmes par défaut de Wordpress, ils chargeront un modèle différent basé sur le type de publication personnalisé. Le if( get_post_type() === 'videos' ) etc ... sera placé dans le fichier où se trouve votre boucle. et charger un partiel différent en fonction de cela.

0
Pim