Le système de modèles WordPress ne fonctionne pas avec get_template_part

Publié par Jean-Michel le

Je conçois un thème wordpress en utilisant le thème Underscore comme base. J’ai créé un type de publication personnalisé appelé Projets. Voici le code qui enregistre le type de publication :

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'Projects',
        array(
            'labels' => array(
                'name' => __( 'projects' ),
                'singular_name' => __( 'projects' )
            ),
        'taxonomies' => array('post_tag'),
        'public' => true,
        'has_archive' => true,
        'supports' => array('title','editor','thumbnail','excerpt'),
        )
    );
}

Donc, maintenant que j’ai créé un nouveau type de publication, je suis allé concevoir le modèle pour le type de publication. Étant donné que Underscore utilise get_template_type pour rassembler le thème, j’ai créé un fichier appelé single-projects.php qui inclut le code suivant :

<?php
/**
 * The Template for displaying all single posts.
 *
 * @package professional1d
 */

get_header(); ?>

    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">

            <?php while ( have_posts() ) : the_post(); ?>

                <?php get_template_part( 'content', 'Projects' ); ?>

                <?php professional1d_content_nav( 'nav-below' ); ?>

                <?php
                    // If comments are open or we have at least one comment, load up the comment template
                    if ( comments_open() || '0' != get_comments_number() )
                        comments_template();
                ?>

            <?php endwhile; // end of the loop. ?>

        </main><!-- #main -->
    </div><!-- #primary -->
</div>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Et puis j’ai créé la page content-projects.php qui contient le code du modèle réel, qui est :

<?php
/**
 * @package professional1d
 */
?>

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <header class="entry-header">
        <h1 class="entry-title"><?php the_title(); ?></h1>

        <div class="entry-meta">
            <?php professional1d_posted_on(); ?>
        </div><!-- .entry-meta -->
    </header><!-- .entry-header -->

    <div class="entry-content">
        <p>
            <img src="<?php
                $thumb_id = get_post_thumbnail_id();
                $thumb_url = wp_get_attachment_image_src($thumb_id,'thumbnail-size', true);
                echo $thumb_url[0];
                        ?>" class="img-thumbnail" align="left">
            <strong><u><?php echo get_the_title(); ?></u></strong><br>
            <strong>Date: </strong> 
                <?php the_field('start_date'); ?>
                <?php
                    if(get_field('end_date')){
                        echo ' - ' . get_field('end_date') .;
                    }
                ?><br>
            <strong>Type: </strong> <?php the_field('type'); ?><br>
            <strong>Status: </strong> <?php the_field('status'); ?>
        </p>
        <div class="sexy_line"></div>

        <?php the_content(); ?>
        <?php
            wp_link_pages( array(
                'before' => '<div class="page-links">' . __( 'Pages:', 'professional1d' ),
                'after'  => '</div>',
            ) );
        ?>
    </div><!-- .entry-content -->

    <footer class="entry-meta">
        <?php
            /* translators: used between list items, there is a space after the comma */
            $category_list = get_the_category_list( __( ', ', 'professional1d' ) );

            /* translators: used between list items, there is a space after the comma */
            $tag_list = get_the_tag_list( '', __( ', ', 'professional1d' ) );

            if ( ! professional1d_categorized_blog() ) {
                // This blog only has 1 category so we just need to worry about tags in the meta text
                if ( '' != $tag_list ) {
                    $meta_text = __( 'This entry was tagged %2$s. Bookmark the <a href="%3$s" title="Permalink to %4$s" rel="bookmark">permalink</a>.', 'professional1d' );
                } else {
                    $meta_text = __( 'Bookmark the <a href="%3$s" title="Permalink to %4$s" rel="bookmark">permalink</a>.', 'professional1d' );
                }

            } else {
                // But this blog has loads of categories so we should probably display them here
                if ( '' != $tag_list ) {
                    $meta_text = __( 'This entry was posted in %1$s and tagged %2$s. Bookmark the <a href="%3$s" title="Permalink to %4$s" rel="bookmark">permalink</a>.', 'professional1d' );
                } else {
                    $meta_text = __( 'This entry was posted in %1$s. Bookmark the <a href="%3$s" title="Permalink to %4$s" rel="bookmark">permalink</a>.', 'professional1d' );
                }

            } // end check for categories on this blog

            printf(
                $meta_text,
                $category_list,
                $tag_list,
                get_permalink(),
                the_title_attribute( 'echo=0' )
            );
        ?>

        <?php edit_post_link( __( 'Edit', 'professional1d' ), '<span class="edit-link">', '</span>' ); ?>
    </footer><!-- .entry-meta -->
</article><!-- #post-## -->

</div>

Je pense avoir suivi le bon protocole pour faire fonctionner le modèle, mais pour une raison quelconque, lorsque j’ouvre l’un des messages du projet, une page avec le contenu du message apparaît, mais elle n’utilise pas le modèle que j’ai conçu dans les projets de contenu fichier .php . Vous pouvez voir le problème en action ici : http://onedirectionconnection.com/tester/?projects=take-me-home-tour Comme vous pouvez le constater, le modèle que j’ai collé ci-dessus n’est pas utilisé.

De plus, j’ai essayé de mettre en minuscules le P dans Projects dans le fichier single-projects.php, mais le contenu après l’en-tête disparaît tout simplement.

Le single.php et content-single.php utilisent la même méthode et cela fonctionne pour cette paire. Quelqu’un serait-il en mesure de me donner un aperçu de ce que je fais mal?

Faites-moi savoir si vous avez besoin de plus d’informations ou de code !

Merci pour votre temps et votre aide.

Solution n°1 trouvée

Quelques petites choses d’abord :

register_post_type($post_type, $args):

$post_type (string) (obligatoire) Type de message. (max. 20 caractères, ne peut pas contenir de majuscules ou d’espaces ) Par défaut : Aucun

Compte tenu de cela, votre

register_post_type( 'Projects',...

devrait être

register_post_type( 'projects',...

Vous pouvez utiliser le labelstableau pour créer des noms correctement capitalisés.

'labels' => array(
    'name' => __( 'Projects' ),
    'singular_name' => __( 'Project' )
),

Vos noms de fichiers de modèles personnalisés doivent tous être en minuscules ainsi que vos get_template_partappels commeget_template_part( 'content', 'projects' );

Assurez-vous également de mettre à jour votre structure de permaliens (ré-enregistrez simplement) une fois que vous avez apporté des modifications à votre code d’initialisation de type de publication personnalisé.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *