Selecteur de langue

Récemment, j’ai voulu partager un article publié sur Heropress sur mon site. Je souhaitais l’afficher dans la liste des publications avec un lien direct vers la ressource externe. Ma problématique : partager un lien direct sans créer une publication supplémentaire qui elle-même afficherait le lien. J’ai utilisé la fonctionnalité des formats de publication ’lien’ (Posts Formats ’link’).

Les formats de publication WordPress

Pour répondre à ce besoin, j’ai utilisé la fonctionnalité native de WordPress, formats de publication (lien vers la documentation – en anglais).

Elle permet aux utilisateurs de choisir différentes mises en forme pour leurs articles en fonction du type de contenu qu’ils publient. Théoriquement, pour chaque format, on a des mises en page différentes ainsi attribuables aux publications pour personnaliser leur présentation selon le contenu.

À noter : Les formats d’affichage ne changent que si cela a été prévu par le thème utilisé.

Formats supportés

  • Note (Aside) : Courts textes sans titre formel.
  • Galerie (Gallery) : Ensemble de plusieurs images.
  • Lien (Link) : Partage de liens vers d’autres pages web.
  • Image (Image) : Publication d’une image avec peu ou pas de texte.
  • Citation (Quote) : Mise en avant d’une citation.
  • Statut (Status) : Courte mise à jour de statut.
  • Vidéo (Video) : Publication d’une vidéo.
  • Audio (Audio) : Partage de fichiers audio.
  • Chat (Chat) : Partage de discussions sous forme de dialogue.

Initialement pensée pour des affichages différents selon le format de publication, la fonctionnalité peut paraître désuète vue les possibilités de l’éditeur Gutenberg, en particulier si on se sert des compositions de blocs. Mais je trouve qu’elle a son utilité pour structurer mon contenu et y greffer un peu de fonctionnel.

Vu les différents formats de publication, ce qui s’approche le plus de mon besoin ici est le format lien.

Utiliser le format ’lien’

Pour changer de format de publication, on sélectionne le format souhaité dans la colonne latérale des réglages, sous la section « Récapitulatif ».

Sélecteur du format de publication "standard" dans WordPress
Sélecteur du format de publication ’standard dans WordPress

Si rien ne s’affiche, c’est que le thème utilisé ne supporte pas cette fonctionnalité. Il faut l’activer en ajoutant l’extrait de code suivant dans le fichier functions.php du thème ou du thème enfant.

add_theme_support('post-formats', ['link']);Langage du code : JavaScript (javascript)

Le sélecteur s’affiche avec la possibilité de sélectionner ’lien’.

Sélecteur du format de publication "standard" dans WordPress
Sélecteur du format de publication ’lien’ dans WordPress

Un lien externe comme permalien de la publication

Je me suis basé sur le descriptif du format lien de la documentation officielle pour penser le fonctionnel.

Lien (format de publication) : Un lien vers un autre site. Les thèmes peuvent utiliser la première balise <a href=""> dans le contenu de l’article comme lien externe pour cet article. Une approche alternative pourrait être que si l’article consiste uniquement en une URL, alors celle-ci sera l’URL et le titre (post_title) sera le nom attaché à l’ancre pour celle-ci.

L’extrait de code suivant récupère le contenu de la publication et assigne le premier lien trouvé comme permalien de la publication.

add_filter('post_link', 'hmwp_modify_permalink_external_link', 10, 2);
function hmwp_modify_permalink_external_link($url, $post) {
    if (has_post_format('link', $post)) {
        $content = apply_filters('the_content', $post->post_content);
        preg_match('/<a\s[^>]*?href=[\'"]([^\'"]*?)[\'"][^>]*?>/', $content, $matches);
        if (!empty($matches[1])) {
            $url = esc_url_raw($matches[1]);
        }
    }

    return $url;
}Langage du code : PHP (php)

Ensuite, pour publier une ressource externe sur le site comme un article, il n’y a plus qu’à :

  1. Créer un nouvel article.
  2. Assigner le format de publication lien dans la colonne latérale des réglages.
  3. Coller le lien directement dans le contenu de la publication.

Et c’est tout 🤗

Afficher le format utilisé dans l’interface d’administration

Pour avoir une indication visuelle dans l’interface d’administration des formats de publication, j’ajoute une colonne dans la liste des articles. Les formats de publication lien sont annotés comme lien externe.

Création de la colonne personnalisée

add_filter('manage_posts_columns', 'hmwp_add_post_format_column');
function hmwp_add_post_format_column($columns) {
    $screen = get_current_screen();
    if ($screen->post_type === 'post') {
        $columns['post_format'] = __('Format de publication', 'holdmywp');
    }

    return $columns;
}Langage du code : PHP (php)

Contenu de la colonne

add_action('manage_posts_custom_column', 'hmwp_display_post_format_column_content', 10, 2);
function hmwp_display_post_format_column_content($column_name, $post_id) {
    if ($column_name === 'post_format') {
        if (has_post_format('link', $post_id)) {
            echo __('Lien externe', 'holdmywp');
        } else {
            echo __('Article standard', 'holdmywp');
        }
    }
}Langage du code : PHP (php)

Si on souhaite prévoir le cas pour tous les formats supportés :

add_action('manage_posts_custom_column', 'hmw_display_post_format_column_content', 10, 2);
function hmw_display_post_format_column_content($column_name, $post_id) {
    if ($column_name === 'post_format') {
        $post_format = get_post_format($post_id);
      
        switch ($post_format) {
            case 'aside':
                echo __('Note', 'text-domain');
                break;
            case 'gallery':
                echo __('Galerie', 'text-domain');
                break;
            case 'link':
                echo __('Lien externe', 'text-domain');
                break;
            case 'image':
                echo __('Image', 'text-domain');
                break;
            case 'quote':
                echo __('Citation', 'text-domain');
                break;
            case 'status':
                echo __('Statut', 'text-domain');
                break;
            case 'video':
                echo __('Vidéo', 'text-domain');
                break;
            case 'audio':
                echo __('Audio', 'text-domain');
                break;
            case 'chat':
                echo __('Chat', 'text-domain');
                break;
            default:
                echo __('Défaut', 'text-domain');
                break;
        }
    }
}Langage du code : PHP (php)

Extrait de code complet

/*	-----------------------------------------------------------------------------------------------
    USE POST FORMAT LINK FOR EXTERNAL LINKS
--------------------------------------------------------------------------------------------------- */
add_filter('post_link', 'hmwp_modify_permalink_external_link', 10, 2);
function hmwp_modify_permalink_external_link($url, $post) {
    if (has_post_format('link', $post)) {
        $content = apply_filters('the_content', $post->post_content);
        preg_match('/<a\s[^>]*?href=[\'"]([^\'"]*?)[\'"][^>]*?>/', $content, $matches);
        if (!empty($matches[1])) {
            $url = esc_url_raw($matches[1]);
        }
    }

    return $url;
}

add_filter('manage_posts_columns', 'hmwp_add_post_format_column');
function hmwp_add_post_format_column($columns) {
    $screen = get_current_screen();
    if ($screen->post_type === 'post') {
        $columns['post_format'] = __('Format de publication', 'holdmywp');
    }

    return $columns;
}

add_action('manage_posts_custom_column', 'hmw_display_post_format_column_content', 10, 2);
function hmw_display_post_format_column_content($column_name, $post_id) {
    if ($column_name === 'post_format') {
        $post_format = get_post_format($post_id);
        
        switch ($post_format) {
            case 'aside':
                echo __('Note', 'text-domain');
                break;
            case 'gallery':
                echo __('Galerie', 'text-domain');
                break;
            case 'link':
                echo __('Lien externe', 'text-domain');
                break;
            case 'image':
                echo __('Image', 'text-domain');
                break;
            case 'quote':
                echo __('Citation', 'text-domain');
                break;
            case 'status':
                echo __('Statut', 'text-domain');
                break;
            case 'video':
                echo __('Vidéo', 'text-domain');
                break;
            case 'audio':
                echo __('Audio', 'text-domain');
                break;
            case 'chat':
                echo __('Chat', 'text-domain');
                break;
            default:
                echo __('Défaut', 'text-domain');
                break;
        }
    }
}Langage du code : PHP (php)

Auteur

Quentin Le Duff – Votre partenaire WordPress

Commentaires

Laisser un commentaire

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