Усечение текста на основе комбинированных символов двух переменных

Я использую пользовательскую функцию для усечения текста на основе аргумента, в котором указано количество разрешенных символов. Вот мой код:

function bm_best_excerpt($length, $ellipsis, $content) {
$text = $content;
$text = strip_tags($text);
$text = substr($text, 0, $length);
$text = substr($text, 0, strripos($text, " "));
$text = $text.$ellipsis;
return $text;
}

НА любой странице я могу обрезать текст, захватив настраиваемое поле Wordpress (содержащее строку текста) и пропустив его через эту функцию следующим образом:

<?php $excerpt = get_field('long_description'); ?>
<p><?php echo bm_best_excerpt(70, ' ... ', $excerpt); ?></p>

Это прекрасно работает и отображает первые 70 символов $excerpt. Я хочу изменить эту функцию, чтобы она сначала подсчитывала количество символов в заголовке (над описанием), а затем использовала все оставшиеся символы для этого описания.

Чтобы проиллюстрировать это, скажем, я хочу разрешить всего 80 символов. Мой RAW HTML ниже:

Here is a Title that is fairly long

Вот описание, за которым следуют некоторые Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut Labore et dolore magna aliqua.

Я хочу, чтобы ОБЩЕЕ количество символов между заголовком и описанием составляло 80. В заголовке 35 символов, что оставляет 45 символов для описания.

Как мне изменить приведенную выше функцию, чтобы она позволяла подсчитывать дополнительную переменную содержимого (в качестве аргумента), а затем вычитать из $length? Я бы хотел, чтобы функция выглядела примерно так:

function bm_best_excerpt($length, $ellipsis, $content1, $content2) {

Где $content1 — заголовок, а $content2 — описание.


person JCHASE11    schedule 14.08.2012    source источник
comment
function bm_best_excerpt($length, $ellipsis, $content, $content2='') { $text=$content.' '.$контент2; ?   -  person Waygood    schedule 14.08.2012
comment
не уверен, что понимаю, что вы пытаетесь донести   -  person JCHASE11    schedule 14.08.2012
comment
Вам просто нужно добавить содержимое в конец заголовка (разделив пробелом для удобочитаемости) и обрезать партию до 80.   -  person Waygood    schedule 14.08.2012
comment
связанный: вы должны попробовать и посмотреть, можете ли вы использовать функцию mysql LEFT(), чтобы в первую очередь извлекать ограниченное количество символов из вашей базы данных...   -  person Cups    schedule 14.08.2012


Ответы (1)


Попробуйте это, чтобы добавить строки вместе и обработать как один:

function bm_best_excerpt($length, $ellipsis, $content, $content2='') {
    // default content2 to empty string, allowing use of old method to still be valid
    $text = $content.' '.$content2; // add the second content to the end of the first
person Waygood    schedule 14.08.2012
comment
см. мой ответ ниже... Я хотел бы рассматривать их как отдельные переменные - person JCHASE11; 14.08.2012
comment
Я пробовал это, но опять же (как и мое решение) заголовок не указан. - person JCHASE11; 14.08.2012
comment
Единственная проблема заключается в том, что заголовок должен быть заключен в теги h2 и ссылка, например: ‹h2›‹a href=‹?php the_permalink(); ?››‹?php the_field('resource_name'); ?›‹/a›‹/h2› - person JCHASE11; 14.08.2012
comment
Как я могу адаптировать $text = $content.' '.$контент2; использовать этот формат? - person JCHASE11; 14.08.2012
comment
Я могу сделать постоянную ссылку другой переменной и передать ее в качестве аргумента? - person JCHASE11; 14.08.2012
comment
Эта строка по какой-то причине не будет обрабатывать постоянную ссылку: .''; - person JCHASE11; 14.08.2012
comment
strip_tags в вашей функции удалит любой html, поэтому вам нужно просто использовать его в $header ИЛИ добавить строку в конце функции для создания ссылки (вам нужно будет передать $link к этому тоже) - person Waygood; 15.08.2012