Модификация previous_post_link() и next_post_link() в WordPress

Владельцам и администраторам блогов на WordPress часто требуется изменить отображение ссылок на предыдущий и последующий посты. По сути, следует модифицировать результат отображения функций previous_post_link() и next_post_link().

Для начала напишем функцию-пример, которая модифицирует один единственный входной аргумент — HTML код ссылки. Для примера добавим CSS класс и сократим текст ссылки, если он превышает заданную длину:

/**
 * Modify function
 *
 * @param string HTML link
 */
function modify_post_link ($link) {
    // добавим CSS класс
    $link = str_replace('<a ', '<a class="nav-link" ', $link);
  
    // максимальное количество символов
    $max = 50;
  
    // выделим текст ссылки
    preg_match('/<a.*?>(.*?)<\/a>/uis', $link, $matches);
  
    // находим вхождение внутри тега ссылки — текст
    $title = $matches[1];
  
    // сократим, если длина больше указанной
    $new_title = mb_strlen($title) >= $max ? mb_substr($title, 0, $max - 3).'...' : $title;
  
    // возвращаем модифицированный HTML код ссылки
    return str_replace('>'.$title.'<', '>'.$new_title.'<', $link);
}

Добавим фильтр постобработчик функций движка, которые отвечают за отображение предыдущей и последущей ссылок. Фильтр будет указывать на нашу новую функцию:

// фильтр для предыдущей ссылки
add_filter('previous_post_link', '<strong>modify_post_link</strong>');

// фильтр для следующей ссылки
add_filter('next_post_link', '<strong>modify_post_link</strong>');

Теперь ссылки будут проходить через нашу функцию. Пример можно расширить и задать разные функции постобработки для предыдущей и следующей ссылки.

Инструкции по теме:

Добавить комментарий