it-swarm.com.de

begrenzen Sie die Wörter im Beitragsinhalt und fügen Sie den Link "Mehr lesen" hinzu

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>";    
?>
4
Juliver Galleto

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;
}
2
Anh Tran

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.

Das Permalink-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">&nbsp;';
    $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' );

Das Plugin für mehr Länge

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

Anmerkungen

  1. Beide Plugins sind "Zero Configuration". Einfach hochladen, aktivieren, fertig.
  2. Sie müssen the_content() oder the_excerpt() in Ihrem Theme verwenden, um diese Plugins nutzen zu können.
1
kaiser