2013-04-26 3 views
0

Я борюсь с этим за полдня, и я не могу понять, как это правильно. У меня есть пользовательская функция на моем сайте wordpress, которая автоматически создает выдержку. Все это идет хорошо, но для некоторых (я думаю, логически) причине он также отключает тег <br />, так как у него есть пробел.Preg_split завинчивает ярлык 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'); 

Спасибо!

ответ

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

Поскольку вы позволяете другие теги, они, вероятно, содержат пробелы, хотя тоже.

+0

Спасибо, это помогло мне! – RobbertT

Смежные вопросы