Изменение мета данных в wp_head (WordPress)

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

В вордпрессе есть такая функция 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() в переменной, можно с переменной уже делать что угодно и потом выводить.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *