WordPress | Appliquer la fonction/le filtre à un modèle spécifique (filtre de fonction d’image en vedette)

Publié par Jean-Michel le

J’ai le code suivant dans mon plugin de réglages.

add_filter( 'the_content', 'sqhse_news_featimgmove', 20 );

function sqhse_news_featimgmove( $content ) {
    $content = preg_replace( "/</p>/", "</p>" . get_the_post_thumbnail($post->ID,'post-single', array( 'class' => "img-fluid img-rounded w-100")) . "<div class='clearfix' style='margin-bottom:10px;'></div>", $content, 1 );
    return $content;
}

Ce qu’il fait :
Il ajoute l’image en vedette après le premier paragraphe, ce qui est génial et exactement ce dont j’ai besoin.

Le problème : Le code s’applique à single.php (super c’est là que j’en ai besoin) mais il s’applique également à single-training_courses.php (un modèle pour un type de publication personnalisé).

L’aide requise : appliquez le code à single.php et non à des sous-modèles uniques tels que single-training_courses.php

Est-ce réalisable ? et si oui, comment puis-je y parvenir?

Solution n°1 trouvée

Vous pouvez utiliser get_post_type()la fonction WordPress et envelopper votre code dans une instruction if comme suit :

add_filter( 'the_content', 'sqhse_news_featimgmove', 20 );

function sqhse_news_featimgmove( $content ) {
    if( get_post_type() == 'post' ) {
        $content = preg_replace( "/</p>/", "</p>" . get_the_post_thumbnail($post->ID,'post-single', array( 'class' => "img-fluid img-rounded w-100")) . "<div class='clearfix' style='margin-bottom:10px;'></div>", $content, 1 );
        return $content;
    }
    return $content;
}

Solution n°2 trouvée

Le filtre que vous utilisez the_content, comme vous l’avez découvert, s’appliquera à toutes les zones de contenu. Vous devez ajouter une condition pour vérifier le type de publication sur lequel vous vous trouvez et ajuster en conséquence. Ma suggestion serait d’utiliser is_singular().

add_filter( 'the_content', 'sqhse_news_featimgmove', 20 );

function sqhse_news_featimgmove( $content ) {
    if ( is_singular( 'post' ) ) {
        $content = preg_replace( "/</p>/", "</p>" . get_the_post_thumbnail($post->ID,'post-single', array( 'class' => "img-fluid img-rounded w-100")) . "<div class='clearfix' style='margin-bottom:10px;'></div>", $content, 1 );
    }

    return $content;
}

Lorsque vous traitez avec des filtres, assurez-vous de toujours renvoyer une valeur. Si vous avez une condition, par exemple, gardez l’instruction de retour en dehors de celle-ci.

https://codex.wordpress.org/Function_Reference/is_singular

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 *