web-dev-qa-db-ja.com

コンテンツを正しく制限してHTMLを削除する方法

私は長い間このコードを使ってきました:

$temp_arr_content = explode(
    " ",
    substr(
        strip_tags(
            get_the_content()
        ),
        0,
        720
    )
);
$temp_arr_content[count( $temp_arr_content ) - 1] = "";
$display_arr_content = implode( " ", $temp_arr_content );
echo $display_arr_content;
if( strlen( strip_tags( get_the_content() ) ) > 0 )
    echo "...";

自分のコンテンツを720文字に制限し、そこからhtmlを削除する
しかし、今日、私は新しいテーマでそれを再び使用しましたが、HTMLコードも出力することに気付きました(HTMLコードは機能しませんが、コンテンツに表示されます)。

私は私のテーマでもこのコードを使用しました:

$excerpt = get_the_excerpt();
echo string_limit_words( $excerpt, 55 );

そして私のFunction.phpのこのコード:

function string_limit_words( $string, $Word_limit ) {
    $words = explode( ' ', $string, ( $Word_limit + 1 ) );
    if( count( $words ) > $Word_limit )
        array_pop( $words );
    return implode( ' ', $words );
}

ただし、単語数を制限してHTMLを削除するには、55から150に変更してもコードは機能せず、55の単語が表示されます。
誰かがこの問題を解決するのを手伝ってくれる?ありがとう

2
Dave

まず、contentの文字列/ Wordの長さを変更しません。意味的には、の抜粋を扱っているので、それに集中しましょう。

次に、抜粋に対して返される単語数を制限するには、 単にexcerpt_lengthをフィルタリングします

<?php
function wpse52673_filter_excerpt_length( $length ) {
    // Return (integer) value for
    // Word-length of excerpt
    return 150;
}
add_filter( 'excerpt_length', 'wpse52673_filter_excerpt_length' );
?>

the_excerpt()を使用することの追加の利点は、自動生成された抜粋の場合、no HTMLは解析されないです。したがって、ユーザー定義の抜粋を使用しない場合は、 完了です です。

ただし、 do を使用してもHTMLタグを削除したい場合は、 the_excerpt に適用されている次のフィルタの一部またはすべてを削除してください。

add_filter( 'the_excerpt',     'wptexturize'      );
add_filter( 'the_excerpt',     'convert_smilies'  );
add_filter( 'the_excerpt',     'convert_chars'    );
add_filter( 'the_excerpt',     'wpautop'          );
add_filter( 'the_excerpt',     'shortcode_unautop');

削除するには、次のように電話してください。

remove_filter( 'the_excerpt', 'wptexturize' );
1
Chip Bennett