0

私は今、これに半日苦労していますが、正しく理解できないようです. 私のワードプレス サイトには、抜粋を自動的に作成するカスタム関数があります。<br />これはすべてうまくいきますが、スペースがあるため、いくつかの(論理的だと思います)理由でタグも切り取られます。

これを修正する方法は?これは preg_split 関数と関係がありますよね?

以下は私のコードです:

function custom_wp_trim_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(']]>', ']]&gt;', $text);

    $allowed_tags = '<p>,<br>,<br/>,<br />,<a>,<em>,<strong>,<img>'; /*** MODIFY THIS. Add the allowed HTML tags separated by a comma.***/
    $text = strip_tags($text, $allowed_tags);

    $excerpt_word_count = 40; /*** MODIFY THIS. change the excerpt word count to any integer you like.***/
    $excerpt_length = apply_filters('excerpt_length', $excerpt_word_count); 

    $excerpt_end = ' <a href="'. get_permalink($post->ID) . '">' . '...' . '</a>'; 
    $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 && $words ) {
        array_pop($words);
        $text = implode(' ', $words);
        $text = $text . $excerpt_more;
    } else {
        $text = implode(' ', $words);
    }
}
return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'custom_wp_trim_excerpt');

ありがとう!

4

1 に答える 1

0

これを追加して、すべての HTML 区切り文字を同じにすることができます。

$text = preg_replace('!<br ?/>!i','<br>',$text);

これらの行の前:

$allowed_tags = '<p>,<br>,<a>,<em>,<strong>,<img>'; /*** MODIFY THIS. Add the allowed HTML tags separated by a comma.***/
$text = strip_tags($text, $allowed_tags);

やっているときは、区切り文字preg_split("/[\n\r\t ]+/",$text)でスペースを分割しています。<br />

preg_split()ステートメントの正規表現を簡略化することもできます。

$words = preg_split("!\s+!", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);

他のタグを許可しているので、おそらくスペースも含まれています。

于 2013-04-26T09:09:29.743 に答える