web-dev-qa-db-ja.com

投稿内容内の単語を制限して追加リンクを追加

あなたがコードを見ることができるように、ルーチンは266idを持つポストを表示することです。私が欲しいのは、その投稿の投稿内容に表示される単語を制限することだけです。たとえば、単語数を300に制限してから、続きを読むリンクを追加します。

これは私がこれまでに得たコードです:

    $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

私はいつも抜粋、投稿内容についても同じ問題を抱えています。 @kaiserが指摘したように、この目的のためのさまざまなフックと関数があります。しかし、時には彼らは私が望むことを正確にはしません。

これが私の解決策です。投稿の内容を受け取り、それを指定された数の単語に切り捨てる独自の関数を作成します。

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

どの機能/テンプレートタグが使用されているかに応じて、"more"リンクを制御する3つのフィルタがあります。悪いところは、彼らがお互いを傍受しているということです。良いことは、現在添付されているフィルタの名前を取得して出力を変更するためにcurrent_filter()を使用してフィルタの出力を単純に変更できることです。

それから抜粋の長さを制限するために'excerpt_length'-フィルタを得ました。これは私たちがパーマリンクを追加することを可能にしません、しかしそれは他のフィルタと組み合わせて私たちを助けます。 2を参照してくださいnd プラグイン.

Permalink-moreプラグイン

このプラグインは、表示される内容に応じて、コンテンツにパーマリンク または 抜粋 - を追加します。また、excerpt_more-フィルタを nothing を出力するようにリセットします。そのため、他のフィルタの邪魔にはなりません。

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

抜粋長プラグイン

抜粋の長さを変更するだけの場合は、もっと簡単なフィルタ設定を使用できます。次のプラグインはとても気の利いた仕事をします。これにより、コンテンツ(ループ内にあり、アクセスする投稿データがあります)が300語に減少します。次のステップでは、各単語の文字を数えます。それからそれは単にこの(動的に割り当てられた)番号を返します。

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

ノート

  1. どちらのプラグインも「ゼロ構成」です。アップロード、有効化、完了です。
  2. このプラグインを利用するには、テーマにthe_content()またはthe_excerpt()を使用する必要があります。
1
kaiser