web-dev-qa-db-fra.com

Supprimer les images de get_the_excerpt

J'utilise une fonction personnalisée pour créer un shortcode qui affiche le dernier article de blog sur la page d'accueil d'un modèle. Mais j'essaie de ne PAS l'afficher d'images.

Je sais que je peux utiliser le plug-in Advanced Excerpt pour le faire supprimer des images, mais le problème est qu'il supprimera également les images du flux index.php que je souhaite conserver, qui utilise the_excerpt() dans le modèle.

Voici ma fonction personnalisée qui crée le shortcode:

function my_recent_news()
{
  global $post;
  $html = "";
  $my_query = new WP_Query( array(
       'post_type' => 'post',
       'posts_per_page' => 4
  ));

  if( $my_query->have_posts() ) : while( $my_query->have_posts() ) : $my_query->the_post();

       $html .= "

       <article>
       <span class=\"date\">" . get_the_date() . "</span>
       <h2><a href=\"" . get_permalink() . "\">" . get_the_title() . "</a></h2>
       " . get_the_excerpt() . "
       </article>
       ";
  endwhile; 

  endif;

  wp_reset_query();

  return $html;

}

add_shortcode( 'news', 'my_recent_news' );

J'ai déjà posté quelque chose à ce sujet auparavant:

obtenir un extrait sans images

mais la solution consistait à utiliser le plug-in Advanced Excerpt, mais j'essaie d'utiliser l'extrait de la page d'accueil et de flux du blog, mais je souhaite conserver le balisage img dans le flux du blog et supprimer le tag img du shortcode personnalisé .

J'ai essayé d'utiliser juste the_excerpt() dans cette fonction de shortcode personnalisée, mais cela semble simplement casser toute la fonction et afficher des éléments vraiment bizarres.

Je ne suis pas trop sûr d'avoir besoin d'un filtre quelque part pour le supprimer ou quoi. Je ne suis pas sûr non plus que si j'avais besoin d'un filtre, où irait-il? Avant la boucle, après la boucle, ou a-t-il besoin de son propre argument construit?

1
ultraloveninja

Ok, donc j'ai fait plus de fouilles et de tests et j'ai découvert que strip_tags() supprime tout formatage dans get_the_excerpt().

Voici mon code mis à jour:

function my_recent_news()
{
  global $post;
  $html = "";
  $my_query = new WP_Query( array(
       'post_type' => 'post',
       'posts_per_page' => 4
  ));

  if( $my_query->have_posts() ) : while( $my_query->have_posts() ) : $my_query->the_post();

       $html .= "

       <article>
       <span class=\"date\">" . get_the_date() . "</span>
       <h2><a href=\"" . get_permalink() . "\">" . get_the_title() . "</a></h2>
       " . strip_tags(get_the_excerpt(), "<a>") . "
       </article>
       ";
  endwhile; 

  endif;

  wp_reset_query();

  return $html;

}

add_shortcode( 'news', 'my_recent_news' );

J'ai ajouté le <a> pour conserver tous les liens hypertexte dans l'extrait de l'article à afficher.

Avec cela, je peux conserver le balisage avec la page de flux de blog et utiliser le plug-in Advanced Excerpt pour aider à réduire la longueur et ce qui ne l'est pas.

0
ultraloveninja

Si vous lisez l'entrée du Codex pour get_the_excerpt() , vous trouverez ceci:

Si la publication ne comporte pas d'extrait, cette fonction applique wp_trim_excerpt au contenu de la publication et renvoie la chaîne générée avec "[...]" à la fin. wp_trim_excerpt est appliqué via le filtre get_the_excerpt et peut être supprimé.

La wp_trim_excerpt() fonction:

Génère un extrait du contenu, si nécessaire.

Le montant de l'extrait Word sera de 55 mots et si le montant est supérieur à celui-ci, la chaîne '[...]' sera ajoutée à l'extrait. Si la chaîne contient moins de 55 mots, le contenu sera renvoyé tel quel.

Ainsi, vous pouvez soit réappliquer wp_trim_excerpt() au filtre get_the_excerpt, soit simplement l'exporter directement:

   $html .= "

   <article>
   <span class=\"date\">" . get_the_date() . "</span>
   <h2><a href=\"" . get_permalink() . "\">" . get_the_title() . "</a></h2>
   " . wp_trim_excerpt() . "
   </article>
   ";
1
Chip Bennett