web-dev-qa-db-fra.com

Custom Post extrait ne fonctionne pas correctement

Ce que je veux

J'ai besoin d'afficher différents types d'extraits. Certains éléments doivent avoir un type de bouton "lire plus", d'autres un autre type. Il en va de même pour la longueur des extraits.

Le problème que j'ai

À l'heure actuelle, l'extrait complet est affiché sur les deux types d'extraits et le bouton Lire plus est totalement absent.

Le code

Fonctions de longueur d'extrait personnalisées:

function custom_excerpt_long($length) {
   return 100;
}

function custom_excerpt_short($length) {
   return 30;
}

Extrait personnalisé "en savoir plus" fonctions des boutons:

function custom_continuereading($more) {
   global $post;
   return '... &mdash; <a class="view-article" href="' . get_permalink($post->ID) . '">Continue reading</a>';
}
function custom_readmore($more) {
   global $post;
   return '... &mdash; <a class="view-article" href="' . get_permalink($post->ID) . '">Read more</a>';
}

Fonction de rappel d'extrait personnalisé:

function custom_excerpt($length_callback = '', $more_callback = '') {
   global $post;

   if (function_exists($length_callback)) {
      add_filter('excerpt_length', $length_callback);
   }
   if (function_exists($more_callback)) {
      add_filter('excerpt_more', $more_callback);
   }

   $output = get_the_excerpt();
   $output = apply_filters('wptexturize', $output);
   $output = apply_filters('convert_chars', $output);
   $output = '<p>' . $output . '</p>';
   return $output;
}

Code pour imprimer l'extrait:

<?php echo custom_excerpt('custom_excerpt_long', 'custom_continuereading'); ?>
<?php echo custom_excerpt('custom_excerpt_short', 'custom_readmore'); ?>

Qu'est-ce que je fais mal? Merci à tous pour votre aide!


UPDATE - Solution de travail

Avec la réponse de D.Dan, je suis allé vers une autre solution. C'est la fonction finale:

function custom_excerpt($length = '') {
   global $post;

   $output = get_the_excerpt();
   $output = apply_filters('wptexturize', $output);
   $output = apply_filters('convert_chars', $output);
   $output = substr($output, 0, $length);
   $output = '<p>' . $output . '... <br><br> <a class="view-article" href="' . get_permalink($post->ID) . '">Continue reading</a></p>';
   return $output;
}

Et je peux appeler la fonction comme ceci:

<?php echo custom_excerpt(100); ?>
1
ismaelw

Pourquoi ne pas utiliser substr ?

Exemple de fonction qui renvoie un extrait abrégé:

function shortened_excerpt() {

    echo substr(get_the_excerpt(), 0, 30) . "...";

}
0
D. Dan