web-dev-qa-db-de.com

Benutzerdefinierter Post-Auszug funktioniert nicht richtig

Was ich möchte

Ich muss verschiedene Arten von Auszügen anzeigen. Einige Elemente müssen eine Art von "Mehr lesen" -Schaltfläche haben, andere müssen eine andere Art von Schaltfläche haben. Gleiches gilt für die Länge der Auszüge.

Das Problem, das ich habe

Derzeit wird der vollständige Auszug auf beiden Arten von Auszügen angezeigt, und die Schaltfläche "Mehr lesen" fehlt vollständig.

Der Code

Benutzerdefinierte Auszugslängenfunktionen:

function custom_excerpt_long($length) {
   return 100;
}

function custom_excerpt_short($length) {
   return 30;
}

Benutzerdefinierter Auszug mit den Funktionen der Schaltfläche "Weitere Informationen":

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>';
}

Benutzerdefinierte Rückruffunktion für Auszüge:

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 zum Ausdrucken des Ausschnitts:

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

Was mache ich falsch? Vielen Dank für Ihre Hilfe!


UPDATE - Arbeitslösung

Mit der Antwort von D.Dan habe ich mich für eine andere Lösung entschieden. Dies ist die letzte Funktion:

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;
}

Und ich kann die Funktion so aufrufen:

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

Warum nicht substr verwenden?

Funktionsbeispiel, das einen verkürzten Auszug zurückgibt:

function shortened_excerpt() {

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

}
0
D. Dan