Ограничение анонса по символам - WordPress

viktorname
На сайте с 22.09.2011
Offline
120
455

Приветствую всех. Подскажите пожалуйста как сделать ограничение анонса по символам в WordPress. В интернете искал искал, в итоге все статьи 2011 года и не работают. Может сейчас что поменялось?

TA
На сайте с 12.06.2009
Offline
116
TiA
#1

Самый простой способ - это добавить функцию для обрезки в шаблон темы. Для своих проектов я написал несколько функций:

function tw_strip($text, $len, $allowed_tags = false, $find = ' ', $dots = '...') {

if ($allowed_tags) {

$allowed_tags_list = 'i|em|b|strong|s|del';

if ($allowed_tags != '+' and mb_strpos($allowed_tags, '+') === 0) {
$allowed_tags = str_replace('+', '', $allowed_tags);
$allowed_tags_list = $allowed_tags_list . '|' . $allowed_tags;
} else {
$allowed_tags_list = $allowed_tags;
}

$allowed_tags_list = '<' . implode('><', explode('|', $allowed_tags_list)) . '>';

} elseif ($allowed_tags === false) {

$allowed_tags_list = '<i><em><b><strong><s><del>';

} else {

$allowed_tags_list = '';

}

$text = strip_tags(strip_shortcodes($text), $allowed_tags_list);

if ($find and mb_strlen($text) > $len) {
$pos = mb_strpos($text, $find, $len);
if ($pos < $len or $pos > ($len + 20)) $pos = $len;
$text = mb_substr($text, 0, $pos) . $dots;
} else {
$pos = $len;
$text = mb_substr($text, 0, $pos);
}

if (mb_strpos($allowed_tags_list, '<a>') !== false) {
$link_start = mb_strrpos($text, '<a');
if ($link_start !== false) {
$link_end = mb_strpos($text, '</a>', $link_start);
if ($link_end === false) {
$text = mb_substr($text, 0, $link_start) . $dots;
}
}
$text = preg_replace('#<a[^>]*?></a>#is', '', $text);
}

if ($allowed_tags_list) $text = force_balance_tags($text);

return $text;

}

function tw_text($item = false, $len = 250, $allowed_tags = false, $find = ' ', $force_cut = true) {

if (isset($item->post_content)) {
$text = $item->post_content;
$excerpt = $item->post_excerpt;
} else {
$text = get_the_content();
$excerpt = get_the_excerpt();
}

if ($excerpt and mb_strlen($excerpt) > 0) {

if ($force_cut) {
echo tw_strip($excerpt, $len, $allowed_tags, $find);
} else {
echo $excerpt;
}

} elseif (mb_strpos($text, '<!--more') !== false) {

$pos = mb_strpos($text, '<!--more');

if ($force_cut) {
echo tw_strip(mb_substr($text, 0, $pos), $len, $allowed_tags, $find);
} else {
echo tw_strip(mb_substr($text, 0, $pos), $pos, $allowed_tags, $find);
}

} else {

echo tw_strip($text, $len, $allowed_tags, $find);

}
}

Обрезку выполяет функция tw_strip. Она позволяет оставлять определенные теги, чистить шорткоды и обрезать по словам. Вторая функция tw_text - это обертка для более удобной работы. В цикле ее можно использовать так:

<?php echo tw_text($post, 200); ?>

Весь код доступен на GitHub

Профессиональная верстка и разработка сайтов на WordPress (http://www.maultalk.com/topic139110s0.html)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий