Как в wordpress добавить span в get_cat_name()?

93
06 января 2020, 00:50

Доброе время суток! Подскажите пожалуйста, как добавить span в get_cat_name, в макете есть заголовок:

<h2><span class="red">С КЕМ МЫ</span> РАБОТАЕМ</h2>

Как в названии категории заключить первые слова в span, чтобы потом в стилях выделить их цветом. Спасибо!

Answer 1

Поскольку вы собираетесь работать с многобайтовыми строками (русские символы), то надо использовать mb_ereg_replace() вместо preg_replace()

<div class="title-h2">
    <?php echo mb_ereg_replace('^((?:\w+\s+){3})', '<span class="red">\\1</span>', get_cat_name( 4 ), 'msri' ); ?>
</div>

Этот код выделяет три первые слова (см. {3}) из результата функции get_cat_name() и оборачивает их в span.

Answer 2

Я вот нашел такой вариант

<div class="title-h2"><?php echo preg_replace("#^(\w+)(.*)$#ui", "<span>$1</span>$2", get_cat_name(4)); ?></div>

но там выделят только первое слово, а как сделать чтобы выделяло первые три слова не знаю

Answer 3

wp-includes/category.php :

function get_cat_name( $cat_id ) {
    $cat_id   = (int) $cat_id;
    $category = get_term( $cat_id, 'category' );
    if ( ! $category || is_wp_error( $category ) ) {
        return '';
    }
    return $category->name;
}

Функция с коробки.. Можно написать свою функцию, можно изменить её с коробки - не знаю на сколько это корректно, честно говоря, с WP имел дело несколько раз, особо не вникал. Вот немного моих мыслей как можно это реализовать:

function get_cat_name( $cat_id ) {
    $cat_id   = (int) $cat_id;
    $category = get_term( $cat_id, 'category' );
    if ( ! $category || is_wp_error( $category ) ) {
        return '';
    }
    if ($cat_id == 4) {
        return get_custom_name($category->name,'[red]','[/red]');
    } else {
        return $category->name;
    }
}
function get_custom_name($string, $start, $end){
    $string = ' ' . $string;
    $ini = strpos($string, $start);
    if ($ini == 0) return '';
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
}

P.S. решение далеко не лучшее, надо:

  1. конкретным категориям где что-то выделить в название прямо вписывать "тэги", аля [red] в примере моём.
  2. следить за id категорий, которым надо что-то выделить

В общем-то, костыль ещё тот, но может сами сделаете как положено. удачи

READ ALSO
Laravel не находит вложение файлы в папке public

Laravel не находит вложение файлы в папке public

Поднял сервер docker+php-fpm+nginxНо у меня такая проблема, я не как не могу получить файлы(css, js, fonts) в папке public если вложенность папок превышает двух

124
Изменение GET параметров на POST в .htaccess

Изменение GET параметров на POST в .htaccess

При переходе между страницами на URL показывает GET параметры

92
Зависшие php скрипты в cron

Зависшие php скрипты в cron

Есть сприпты, что по крону бегают на почту и загружают файлы, если те попадают под условия

108