У меня установлен плагин All In One SEO Pack для заполнения Title и Description каждого поста.
С целью задания для рубрик своих Title, Description, Keywords с помощью плагина Advanced Custom Fields были созданы соответствующие доп. поля (см. скрин).
И потом в header.php был добавлен код:
<?php
function head_replace($buffer) {
if ( is_category() ) { // если это шаблон рубрики
// Формируем ID рубрики
$cat_id = 'category_'.the_category_ID(false);
// Получаем значения SEO полей по их именам
// Если вы по другому назвали поля, замените первые параметры get_field
$seo_title = get_field('my_seo_title', $cat_id);
$seo_description = get_field('my_seo_description', $cat_id);
$seo_keywords = get_field('my_seo_keywords', $cat_id);
if ( !empty($seo_keywords) ) { // если поле seo keywords заполнено
// удаляем старый keywords, если он есть
$buffer = preg_replace('#<meta[^>]+["\']keywords["\'][^>]*>#si', '', $buffer);
// вставляем новый
$buffer = '<meta name="keywords" content="'.$seo_keywords.'" />'."\r\n" . $buffer;
}
if ( !empty($seo_description) ) { // если поле seo description заполнено
// удаляем старый description, если он есть
$buffer = preg_replace('#<meta[^>]+["\']description["\'][^>]*>#si', '', $buffer);
// вставляем новый
$buffer = '<meta name="description" content="'.$seo_description.'" />'."\r\n" . $buffer;
}
if ( !empty($seo_title) ) { // если поле seo title заполнено
// удаляем старый title, если он есть
$buffer = preg_replace('#<title.+?/title>#si', '', $buffer);
// вставляем новый
$buffer = '<title>'.$seo_title.'</title>'."\r\n" . $buffer;
}
}
return $buffer;
}
ob_start('head_replace');
?>
А перед </head> вставьте такой код:
<?php ob_end_flush(); ?>
Но почему то в исходном коде все равно отображается по два Title и Description. 🙁 Не могу понять почему код не удаляет лишний Title и Description. Прошу помощи. Спасибо