Wie Sie im Code sehen können, besteht die Routine darin, den Beitrag anzuzeigen, der eine id
von 266
enthält. Jetzt möchte ich nur noch die Wörter begrenzen, die im Inhalt dieses Beitrags angezeigt werden. Angenommen, ich möchte die Anzahl der Wörter auf 300 begrenzen und dann einen Link zum Lesen weiterer Informationen hinzufügen.
Dies ist der Code, den ich bisher bekommen habe:
$post_id = 266;
echo "<div id='widgets-wrapper3'><div id='marginwidgets' style='overflow: auto; max-width: 100%; margin: 0 auto; border: none !important;'>";
$queried_post = get_post($post_id);
echo "<div class='thewidgets'>";
echo $queried_post->post_content;
echo '</div>';
echo "</div></div>";
?>
Ich habe immer das gleiche Problem mit Post-Auszügen, Post-Inhalten. Es gibt verschiedene Hooks und Funktionen für diesen Zweck, wie @kaiser hervorhob. Aber manchmal machen sie nicht genau das, was ich will.
Hier ist meine Lösung: Ich schreibe meine eigene Funktion, die den Inhalt des Beitrags auf die angegebene Anzahl von Wörtern reduziert:
function wpse69204_excerpt( $num_words = 20, $ending = '...', $post_id = null )
{
global $post;
// Truncate post content
$current_post = $post_id ? get_post( $post_id ) : $post;
$excerpt = strip_shortcodes( $current_post->post_content );
$excerpt = wp_trim_words( $excerpt, $num_words, $ending );
// Read more link
$excerpt .= '<a href="' . get_permalink( $post ) . '" title="">Continue reading...</a>';
return $excerpt;
}
Es gibt drei Filter, die den "more" -Link steuern, abhängig davon, welche Funktion/Template-Tag verwendet wird. Das Schlimme ist, dass sie sich gegenseitig abfangen. Das Gute ist, dass Sie einfach die Ausgabe des Filters mit current_filter()
ändern können, um den Namen des aktuell angehängten Filters abzurufen und die Ausgabe zu ändern.
Dann haben wir den 'excerpt_length'
- Filter, um die Länge des Ausschnitts zu begrenzen. Dieser erlaubt uns nicht, einen Permalink hinzuzufügen, aber er hilft uns in Kombination mit den anderen Filtern. Siehe die 2nd Plugin.
Dieses Plugin fügt den Permalink zum Inhalt oder Auszug hinzu - je nachdem, was angezeigt wird. Außerdem wird der excerpt_more
- Filter zurückgesetzt, um nothing auszugeben, sodass die anderen Filter nicht beeinträchtigt werden.
<?php
/** Plugin Name: (#69204) »kaiser« Adds a permalink to the excerpt & content */
/**
* Alters the display of the "more" link
*
* @param string $permalink
* @param string $text
* @return string $html
*/
function wpse69204_more_link( $output )
{
$html .= '<span class="post-more"> ';
$html .= sprintf(
'<a href="%s#more-%s" class="more-link" title="read more" >'
,get_permalink()
,get_the_ID()
);
$html .= '</a></span>';
// Override 'excerpt_more'
if ( 'excerpt_more' === current_filter() )
return;
// Strip the content for the `get_the_excerpt` filter.
$output = wp_trim_words( $output, 300 );
// Append for the excerpt
if ( 'get_the_excerpt' === current_filter() )
return $output.$html;
// The permalink for the `the_content_more_link`-filter.
return $html;
}
# "More" link for the content
add_filter( 'the_content_more_link', 'wpse69204_more_link' );
add_filter( 'get_the_excerpt', 'wpse69204_more_link' );
add_filter( 'excerpt_more', 'wpse69204_more_link' );
Wenn Sie nur die Länge des Ausschnitts ändern möchten, können Sie eine viel einfachere Filterkonfiguration verwenden. Das folgende Plugin leistet sehr gute Arbeit. Es reduziert den Inhalt (wir sind in der Schleife und haben Post-Daten zuzugreifen) auf 300 Wörter. Im nächsten Schritt werden die Buchstaben jedes einzelnen Wortes gezählt. Dann gibt es einfach diese (dynamisch zugewiesene) Nummer zurück.
<?php
/** Plugin Name: (#69204) »kaiser« Limit excerpt length by Word count */
function wpse69204_excerpt_length( $length )
{
$to_count = array_splice( get_the_content(), 300 );
$i = 0;
foreach ( $to_count as $Word )
{
$i += strlen( $Word );
}
return $i;
}
add_filter( 'excerpt_length', 'wpse69204_excerpt_length' );
the_content()
oder the_excerpt()
in Ihrem Theme verwenden, um diese Plugins nutzen zu können.