В вордпрессе есть такая функция wp_head(), выводящая данные в раздел head. Так вот, эта функция выводит и title meta-description. А что если надо создать отдельный шаблон вывода мета для отдельной рубрики, и не хочется переделывать весь сайт чтоб шаблон можно было задавать плагином Yoast SEO, который успешно с этим справляется, только надо вынести рубрику в отдельный тип записи.
Для этого воспользуемся перехватом вывода данных функции wp_head(), тоесть запретим ей вывод и результат направим в буфер обмена, а потом из буфера обмена в функцию по обработке результата.
Вывод wp_head помещаем в буфер и обрабатываем функцией
<?php global $rain_url; $rain_url = $_SERVER['REQUEST_URI']; global $category_id; $categories = get_the_category(); $category_id = $categories[0]->cat_ID; global $title_; $title_ = esc_html(get_the_title()); function rain_head($buffer) { global $category_id; global $title_; global $rain_url; if (($category_id == 20)&&(strpos($rain_url, '/category/vrachi/') === false)){ $x1 = strpos($buffer, '<title>'); $x2 = strpos($buffer, '</title>'); $old_title = substr($buffer, $x1, $x2+8); $new_title = '<title>Врач - '.$title_.' (из Германии)</title>'; $buffer = str_replace($old_title,$new_title,$buffer); } return $buffer; } ob_start("rain_head"); wp_head(); ob_end_flush(); ?>
Теперь по подробней.
Обворачиваем wp_head() функциями ob_start(«rain_head») и ob_end_flush(), для того чтобы перехватить данные и отправить результат в функцию по обработке результата rain_head().
Шаблон должен применяться ко все записям рубрики, НО не применяться к странице рубрики.
для этого создано условие
if (($category_id == 20)&&(strpos($rain_url, '/category/vrachi/') === false)){
, где
$category_id — проверяем на вхождение записи в оптеделенную рубрику
$rain_url — указываем что урл не должен содержать основную рубрику (это зависит от того как настроен проект, возможно, такого делать и не надо)
Примечание
Данный пример не является аксиомой изменения мета в функции wp_head(), а только как один из десятка вариантов.
Вывод wp_head назначаем переменной
Тут делаем тоже самое, но результат буфера загоняем в переменную
ob_start(); wp_head(); $head = ob_get_clean(); echo $head;
Получив результат работы функции wp_head() в переменной, можно с переменной уже делать что угодно и потом выводить.