WordPress 6 min de lecture

Créer un espace presse WordPress propre avec CPT, ACF et templates maintenables

#wordpress#acf#seo

Structurez un espace presse WordPress avec type de contenu dédié, champs ACF, templates clairs, SEO et maintenance sans dépendance fragile.

Créer un espace presse WordPress propre avec CPT, ACF et templates maintenables

Un espace presse WordPress ne devrait pas être une simple page remplie à la main. Dès qu'il y a plusieurs communiqués, visuels, contacts, documents PDF ou dates de publication, il faut une structure éditoriale propre.

Ce tutoriel montre comment construire un espace presse maintenable avec un Custom Post Type, des champs ACF et des templates clairs. L'objectif: permettre à une équipe de publier sans casser la mise en page, tout en gardant un socle SEO correct.

Objectif

Nous allons mettre en place:

  • un type de contenu press_release;
  • des champs ACF pour les informations presse;
  • une archive filtrable et lisible;
  • une page détail avec documents associés;
  • quelques garde-fous SEO et maintenance.

Le code peut vivre dans un thème sur mesure ou dans un petit plugin métier. Pour un projet client, je préfère souvent le plugin métier: le contenu reste disponible même si le thème change.

Créer le Custom Post Type

Ajoutez le CPT dans un plugin ou dans functions.php si le projet est simple:

add_action('init', function () {
    register_post_type('press_release', [
        'labels' => [
            'name' => 'Communiqués',
            'singular_name' => 'Communiqué',
            'add_new_item' => 'Ajouter un communiqué',
            'edit_item' => 'Modifier le communiqué',
        ],
        'public' => true,
        'has_archive' => true,
        'rewrite' => [
            'slug' => 'presse',
        ],
        'menu_icon' => 'dashicons-megaphone',
        'supports' => ['title', 'editor', 'thumbnail', 'excerpt'],
        'show_in_rest' => true,
    ]);
});

Après l'ajout, allez dans Réglages > Permaliens et enregistrez pour rafraîchir les règles de réécriture.

Ajouter les champs ACF

Dans ACF, créez un groupe de champs "Informations presse" affiché si le type de publication est press_release.

Champs utiles:

  • published_on: date officielle du communiqué;
  • press_contact_name: contact presse;
  • press_contact_email: email de contact;
  • download_file: PDF ou dossier média;
  • external_link: lien vers une ressource externe;
  • highlight: texte court mis en avant.

Vous pouvez aussi déclarer les champs en PHP pour versionner la configuration:

add_action('acf/init', function () {
    acf_add_local_field_group([
        'key' => 'group_press_release',
        'title' => 'Informations presse',
        'fields' => [
            [
                'key' => 'field_press_published_on',
                'label' => 'Date officielle',
                'name' => 'published_on',
                'type' => 'date_picker',
                'display_format' => 'd/m/Y',
                'return_format' => 'Y-m-d',
            ],
            [
                'key' => 'field_press_download_file',
                'label' => 'Document PDF',
                'name' => 'download_file',
                'type' => 'file',
                'return_format' => 'array',
            ],
            [
                'key' => 'field_press_highlight',
                'label' => 'Phrase mise en avant',
                'name' => 'highlight',
                'type' => 'textarea',
                'rows' => 3,
            ],
        ],
        'location' => [
            [
                [
                    'param' => 'post_type',
                    'operator' => '==',
                    'value' => 'press_release',
                ],
            ],
        ],
    ]);
});

La déclaration PHP évite les surprises entre local, staging et production. C'est précieux sur les sites maintenus dans la durée.

Créer l'archive

Dans le thème, ajoutez archive-press_release.php:

<?php get_header(); ?>

<main class="press-archive">
    <header class="press-archive__header">
        <p>Espace presse</p>
        <h1>Communiqués et ressources presse</h1>
        <p>Retrouvez les dernières annonces et documents officiels.</p>
    </header>

    <section class="press-archive__list">
        <?php if (have_posts()) : ?>
            <?php while (have_posts()) : the_post(); ?>
                <?php
                $date = get_field('published_on');
                $highlight = get_field('highlight');
                ?>
                <article class="press-card">
                    <?php if ($date) : ?>
                        <time datetime="<?php echo esc_attr($date); ?>">
                            <?php echo esc_html(date_i18n('j F Y', strtotime($date))); ?>
                        </time>
                    <?php endif; ?>

                    <h2>
                        <a href="<?php the_permalink(); ?>">
                            <?php the_title(); ?>
                        </a>
                    </h2>

                    <?php if ($highlight) : ?>
                        <p><?php echo esc_html($highlight); ?></p>
                    <?php else : ?>
                        <?php the_excerpt(); ?>
                    <?php endif; ?>
                </article>
            <?php endwhile; ?>
        <?php else : ?>
            <p>Aucun communiqué publié pour le moment.</p>
        <?php endif; ?>
    </section>
</main>

<?php get_footer(); ?>

La règle importante: tout champ sorti dans le HTML doit être échappé. Utilisez esc_html, esc_attr, esc_url selon le contexte.

Créer la page détail

Ajoutez single-press_release.php:

<?php get_header(); ?>

<main class="press-single">
    <?php while (have_posts()) : the_post(); ?>
        <?php
        $file = get_field('download_file');
        $contactEmail = get_field('press_contact_email');
        ?>

        <article>
            <p>Espace presse</p>
            <h1><?php the_title(); ?></h1>

            <div class="press-single__content">
                <?php the_content(); ?>
            </div>

            <?php if ($file) : ?>
                <p>
                    <a href="<?php echo esc_url($file['url']); ?>" download>
                        Télécharger le communiqué
                    </a>
                </p>
            <?php endif; ?>

            <?php if ($contactEmail) : ?>
                <aside>
                    <h2>Contact presse</h2>
                    <a href="mailto:<?php echo esc_attr($contactEmail); ?>">
                        <?php echo esc_html($contactEmail); ?>
                    </a>
                </aside>
            <?php endif; ?>
        </article>
    <?php endwhile; ?>
</main>

<?php get_footer(); ?>

Ne mettez pas les coordonnées en dur dans le template si elles peuvent changer. Un champ ACF ou une page d'options évite les modifications de code pour une simple mise à jour.

Soigner le SEO

Un espace presse doit être indexable, mais pas bruyant.

Bonnes pratiques:

  • un H1 unique par communiqué;
  • une meta description basée sur l'excerpt ou le champ highlight;
  • une archive avec contenu introductif;
  • des URLs stables, par exemple /presse/nom-du-communique/;
  • des PDFs nommés proprement;
  • pas de pages de tags inutiles si elles sont vides.

Si vous utilisez SEOPress ou Yoast, configurez un modèle de title spécifique au CPT:

%%post_title%% - Espace presse

La meta description peut reprendre l'excerpt. Évitez les descriptions générées depuis le début du contenu si vos communiqués commencent tous par la même formule.

Ajouter des données structurées

Pour un communiqué, NewsArticle peut être pertinent si le contenu a une vraie valeur d'actualité.

add_action('wp_head', function () {
    if (!is_singular('press_release')) {
        return;
    }

    $data = [
        '@context' => 'https://schema.org',
        '@type' => 'NewsArticle',
        'headline' => get_the_title(),
        'datePublished' => get_the_date('c'),
        'dateModified' => get_the_modified_date('c'),
        'url' => get_permalink(),
    ];

    echo '<script type="application/ld+json">' .
        wp_json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) .
        '</script>';
});

Restez honnête: si la page est une simple ressource corporate, Article peut suffire. Les données structurées ne doivent pas promettre plus que le contenu.

Prévoir la maintenance

Un espace presse vit souvent plusieurs années. Prévoyez:

  • un export ACF JSON versionné;
  • une liste claire des plugins indispensables;
  • des tests de liens cassés;
  • une vérification des PDFs trop lourds;
  • une procédure de synchronisation local/production;
  • des mises à jour WordPress et plugins régulières.

Pour les médias, imposez une convention de nommage:

2026-06-nom-communique-presse.pdf
2026-06-visuel-communique.jpg

Cela aide les rédacteurs, le SEO et les futures migrations.

Option: composants Vue dans WordPress

Si l'espace presse a besoin de filtres dynamiques ou d'une recherche rapide, vous pouvez monter un petit composant Vue sur l'archive. Gardez WordPress responsable du contenu et Vue responsable de l'interaction.

<div id="press-search" data-endpoint="/wp-json/site/v1/press"></div>

Puis exposez un endpoint REST qui renvoie seulement les champs nécessaires. Ne chargez pas toute l'administration dans le front.

Conclusion

Un espace presse WordPress réussi repose sur une structure simple: CPT, champs propres, templates maîtrisés et maintenance prévue. ACF apporte de la souplesse, mais la vraie qualité vient du cadrage éditorial et technique.

Avec cette base, l'équipe peut publier vite, le site reste propre, et le développeur garde un code compréhensible au lieu d'un empilement de pages bricolées.