Antworten:
KOMPLETTE ANLEITUNG ZU AUSZÜGEN
Ich habe vor kurzem einige Fragen zu Auszügen beantwortet, daher werde ich eine detaillierte Erläuterung geben, soweit ich kann.
VORWORT
Aus dieser Antwort scheinen sich einige Fragen zu ergeben, wo der Code hingehen soll, und die Antwort lautet: Es liegt wirklich an Ihnen und wie Sie es für richtig halten. Es gibt eine Reihe von Optionen, mit denen Sie den Code platzieren können (falls nicht ausdrücklich angegeben):
In der functions.php deines Themas oder in einer beliebigen Datei, die als Funktionsdatei verwendet wird. Denken Sie daran, wenn Sie dies tun, und wenn das Thema nicht Ihr eigenes ist, gehen alle Änderungen verloren, wenn Sie Ihr Thema aktualisieren
Eine bessere Möglichkeit wäre, den Code in einem untergeordneten Thema zu verwenden. Wie oben in der Datei functions.php oder functions related
Verwenden Sie den Code in einem Plugin. Dies ist die bevorzugte Methode, da der Code auf diese Weise für alle Themen verfügbar ist. Wenn Sie das Thema wechseln, müssen Sie sich nicht darum kümmern, den gleichen Code neu zu schreiben.
Ich hoffe das klärt ein bisschen auf :-)
HTML-TAGS / FORMATIERUNG
the_excerpt()
Erstens akzeptiert er keine Parameter, daher kann nichts an ihn übergeben werden. Es ist eine Tatsache, dass the_excerpt()
der Inhalt auf 55 Wörter gekürzt wird und alle HTML-Tags entfernt werden, bevor der Text zurückgegeben wird. the_excerpt()
befindet sich in wp-includes / post-template.php . Um bestimmte oder alle HTML-Tags im Auszug zuzulassen, muss ein neuer Auszug erstellt werden.
Zuerst muss die ursprüngliche Funktion entfernt werden, und dann muss die neue Funktion verknüpft werden get_the_excerpt
. Bitte beachten Sie, dass dieser neue Auszug weiterhin wie the_excerpt()
in Vorlagendateien aufrufbar ist , ohne dass dies geändert werden muss. get_the_excerpt()
befindet sich in wp-includes / post-template.php .
Der Auszug wird verwendet wp_trim_excerpt
, um den zugeschnittenen Text zurückzugeben, daher müssen wir ihn wp_trim_excerpt
zuerst aus dem Auszugfilter entfernen . wp_trim_excerpt()
befindet sich in wp-includes / formatting.php, Zeile 2355. So geht's:
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
Sie können jetzt Ihren neuen Auszug hinzufügen get_the_excerpt
add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');
Um HTML-Tags / Formatierungen zuzulassen, müssen wir angeben, welche Tags Sie zulassen müssen. Sie können die folgende strip_tags
Anweisung verwenden, um dies zu erreichen
$wpse_excerpt = strip_tags($wpse_excerpt, wpse_allowedtags());
Das zweite Argument wpse_allowedtags()
ist eine kleine Funktion, die zum Hinzufügen der Tags verwendet the_excerpt()
wird. Eine vollständige Liste der gültigen HTML 5-Tags finden Sie hier . Hier ist die Funktion, fügen Sie alle HTML-Tags hinzu, die Sie zulassen / behalten müssen
function wpse_allowedtags() {
// Add custom tags to this string
return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>';
}
Wenn Sie alle HTML-Tags zulassen müssen, dh keine Tags strips_tags()
entfernen müssen , kann die Funktion vollständig weggelassen / entfernt werden.
Wenn HTML-Tags zulässig sind, werden diese Tags jedoch als Wörter gezählt, sodass Ihre Wortanzahl für Auszüge mit Tags und ohne Tags nicht identisch ist. Um dies zu korrigieren, müssen Sie diese Tags zuerst aus der tatsächlichen Wortanzahl entfernen, damit nur Wörter gezählt werden.
Ich habe einen Auszug geschrieben, der alle Tags zulässt, nur Wörter als Wörter zählt und einen Satz nach der festgelegten Anzahl von Wörtern vervollständigt (sodass der Text nicht in der Mitte des Satzes abgeschnitten wird) und nach dem letzten Wort einen weiteren Text hinzufügt .
Hier ist der vollständige Code
function wpse_allowedtags() {
// Add custom tags to this string
return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>';
}
if ( ! function_exists( 'wpse_custom_wp_trim_excerpt' ) ) :
function wpse_custom_wp_trim_excerpt($wpse_excerpt) {
$raw_excerpt = $wpse_excerpt;
if ( '' == $wpse_excerpt ) {
$wpse_excerpt = get_the_content('');
$wpse_excerpt = strip_shortcodes( $wpse_excerpt );
$wpse_excerpt = apply_filters('the_content', $wpse_excerpt);
$wpse_excerpt = str_replace(']]>', ']]>', $wpse_excerpt);
$wpse_excerpt = strip_tags($wpse_excerpt, wpse_allowedtags()); /*IF you need to allow just certain tags. Delete if all tags are allowed */
//Set the excerpt word count and only break after sentence is complete.
$excerpt_word_count = 75;
$excerpt_length = apply_filters('excerpt_length', $excerpt_word_count);
$tokens = array();
$excerptOutput = '';
$count = 0;
// Divide the string into tokens; HTML tags, or words, followed by any whitespace
preg_match_all('/(<[^>]+>|[^<>\s]+)\s*/u', $wpse_excerpt, $tokens);
foreach ($tokens[0] as $token) {
if ($count >= $excerpt_length && preg_match('/[\,\;\?\.\!]\s*$/uS', $token)) {
// Limit reached, continue until , ; ? . or ! occur at the end
$excerptOutput .= trim($token);
break;
}
// Add words to complete sentence
$count++;
// Append what's left of the token
$excerptOutput .= $token;
}
$wpse_excerpt = trim(force_balance_tags($excerptOutput));
$excerpt_end = ' <a href="'. esc_url( get_permalink() ) . '">' . ' » ' . sprintf(__( 'Read more about: %s »', 'wpse' ), get_the_title()) . '</a>';
$excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end);
//$pos = strrpos($wpse_excerpt, '</');
//if ($pos !== false)
// Inside last HTML tag
//$wpse_excerpt = substr_replace($wpse_excerpt, $excerpt_end, $pos, 0); /* Add read more next to last word */
//else
// After the content
$wpse_excerpt .= $excerpt_more; /*Add read more in new paragraph */
return $wpse_excerpt;
}
return apply_filters('wpse_custom_wp_trim_excerpt', $wpse_excerpt, $raw_excerpt);
}
endif;
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');
Sie können einfach das '//' von Funktionen entfernen, die Sie zusätzlich benötigen.
BENUTZERDEFINIERTE AUSZUGSLÄNGEN
Manchmal müssen Sie einfache Auszüge unterschiedlicher Länge anzeigen, und es ist nicht sinnvoll, für jeden Beitrag / jede Funktion / Seite einen Auszug zu schreiben. Hier ist eine nette kleine Funktion mitwp_trim_words
function wpse_custom_excerpts($limit) {
return wp_trim_words(get_the_excerpt(), $limit, '<a href="'. esc_url( get_permalink() ) . '">' . ' …' . __( 'Read more »', 'wpse' ) . '</a>');
}
Diese kleine Funktion übernimmt die Aufgabe get_the_excerpt
, sie auf $limit
die vom Benutzer festgelegten Werte zu trimmen und den Text mit einem weiterführenden Link am Ende zurückzugeben.
Sie können diesen Auszug wie folgt in Ihrer Vorlage aufrufen
echo wpse_custom_excerpts($limit);
Wo $limit
wird Ihre Wortzahl sein, so wird ein Auszug von 30 Wörtern sein
echo wpse_custom_excerpts(30);
Nur eine Sache zu beachten, wenn Sie Ihr Limit auf mehr als 55 Wörter setzen, werden nur 55 Wörter zurückgegeben, da der Auszug nur 55 Wörter lang ist. Wenn längere Auszüge benötigt werden, verwenden Sie get_the_content
stattdessen.
CUSTOM EXCERPT LÄNGE
Wenn Sie nur die Länge von ändern müssen the_excerpt()
, können Sie die folgende Funktion verwenden
function wpse_excerpt_length( $length ) {
return 20;
}
add_filter( 'excerpt_length', 'wpse_excerpt_length', 999 );
Denken Sie daran, dass Sie eine höhere Priorität als 10 festlegen müssen, damit Ihre benutzerdefinierte Funktion nach der Standardeinstellung ausgeführt wird.
HINZUFÜGEN MEHR LINK LESEN
Alle Texte, die vom Auszug zurückgegeben werden, haben [...]
am Ende den Hass, der nicht anklickbar ist. Verwenden Sie diese Funktion, um anstelle der hellips einen weiteren Text hinzuzufügen
function wpse_excerpt_more( $more ) {
return ' <a class="read-more" href="'. get_permalink( get_the_ID() ) . '">' . __('Read More', 'your-text-domain') . '</a>';
}
add_filter( 'excerpt_more', 'wpse_excerpt_more' );
BEARBEITEN
Auszug aus dem ersten Absatz
Ich möchte dies vollständig halten, daher hier der Auszug, der nach dem ersten Absatz abgeschnitten wird.
Hier ist eine Funktion, die HTML-Tags auf dem neuesten Stand hält, einen "Read More" -Link am Ende des Ausschnitts hinzufügt und den Auszug nach dem ersten Absatz abschneidet.
if ( ! function_exists( 'wpse0001_custom_wp_trim_excerpt' ) ) :
function wpse0001_custom_wp_trim_excerpt($wpse0001_excerpt) {
global $post;
$raw_excerpt = $wpse0001_excerpt;
if ( '' == $wpse0001_excerpt ) {
$wpse0001_excerpt = get_the_content('');
$wpse0001_excerpt = strip_shortcodes( $wpse0001_excerpt );
$wpse0001_excerpt = apply_filters('the_content', $wpse0001_excerpt);
$wpse0001_excerpt = substr( $wpse0001_excerpt, 0, strpos( $wpse0001_excerpt, '</p>' ) + 4 );
$wpse0001_excerpt = str_replace(']]>', ']]>', $wpse0001_excerpt);
$excerpt_end = ' <a href="'. esc_url( get_permalink() ) . '">' . ' » ' . sprintf(__( 'Read more about: %s »', 'pietergoosen' ), get_the_title()) . '</a>';
$excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end);
//$pos = strrpos($wpse0001_excerpt, '</');
//if ($pos !== false)
// Inside last HTML tag
//$wpse0001_excerpt = substr_replace($wpse0001_excerpt, $excerpt_end, $pos, 0);
//else
// After the content
$wpse0001_excerpt .= $excerpt_more;
return $wpse0001_excerpt;
}
return apply_filters('wpse0001_custom_wp_trim_excerpt', $wpse0001_excerpt, $raw_excerpt);
}
endif;
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'wpse0001_custom_wp_trim_excerpt');
Wenn Sie eine Problemumgehung benötigen, um den Link "Mehr lesen" nach dem Auszug nicht anzuzeigen, wenn der Auszug kürzer ist als die festgelegte Anzahl von Wörtern, lesen Sie bitte die folgende Frage und Antwort
functions.php
. Sie können das oben if ( ! function_exists( 'wpse_custom_wp_trim_excerpt' ) ) :
in Ihremfunctions.php
Fügen Sie bei Bedarf weitere Tags hinzu $allowed_tags = ...
function _20170529_excerpt($text) {
$raw_excerpt = $text;
if ( '' == $text ) {
//Retrieve the post content.
$text = get_the_content('');
//Delete all shortcode tags from the content.
$text = strip_shortcodes( $text );
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$allowed_tags = '<a>,<b>,<br><i>';
$text = strip_tags($text, $allowed_tags);
$excerpt_word_count = 55; /*** MODIFY THIS. change the excerpt word count to any integer you like.***/
$excerpt_length = apply_filters('excerpt_length', $excerpt_word_count);
$excerpt_end = '[...]'; /*** MODIFY THIS. change the excerpt endind to something else.***/
$excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end);
$words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
if ( count($words) > $excerpt_length ) {
array_pop($words);
$text = implode(' ', $words);
$text = $text . $excerpt_more;
} else {
$text = implode(' ', $words);
}
}
return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}
Sie können auch einen Rich-Text-Editor für Auszüge hinzufügen. Fügen Sie den folgenden Code in die Plugin-Datei oder die function.php-Datei des Themas ein, und Sie können den HTML-Editor für Auszüge anzeigen. Außerdem werden auch Auszüge im HTML-Format gerendert. #Prost
Ich habe das von irgendwoher kopiert, erinnere mich aber nicht an die Quelle. Ich benutze dies in allen Projekten und es funktioniert.
/**
* Replaces the default excerpt editor with TinyMCE.
*/
add_action( 'add_meta_boxes', array ( 'T5_Richtext_Excerpt', 'switch_boxes' ) );
class T5_Richtext_Excerpt
{
/**
* Replaces the meta boxes.
*
* @return void
*/
public static function switch_boxes()
{
if ( ! post_type_supports( $GLOBALS['post']->post_type, 'excerpt' ) )
{
return;
}
remove_meta_box(
'postexcerpt', // ID
'', // Screen, empty to support all post types
'normal' // Context
);
add_meta_box(
'postexcerpt2', // Reusing just 'postexcerpt' doesn't work.
__( 'Excerpt' ), // Title
array ( __CLASS__, 'show' ), // Display function
null, // Screen, we use all screens with meta boxes.
'normal', // Context
'core', // Priority
);
}
/**
* Output for the meta box.
*
* @param object $post
* @return void
*/
public static function show( $post )
{
?>
<label class="screen-reader-text" for="excerpt"><?php
_e( 'Excerpt' )
?></label>
<?php
// We use the default name, 'excerpt', so we don’t have to care about
// saving, other filters etc.
wp_editor(
self::unescape( $post->post_excerpt ),
'excerpt',
array (
'textarea_rows' => 15,
'media_buttons' => FALSE,
'teeny' => TRUE,
'tinymce' => TRUE
)
);
}
/**
* The excerpt is escaped usually. This breaks the HTML editor.
*
* @param string $str
* @return string
*/
public static function unescape( $str )
{
return str_replace(
array ( '<', '>', '"', '&', ' ', '&nbsp;' ),
array ( '<', '>', '"', '&', ' ', ' ' ),
$str
);
}
}
function wpse_allowedtags() { // Add custom tags to this string return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>'; }
im verwirrt