В некоторых редких случаях в WordPress нужно автоматически менять (или добавлять что-то) в Title и Description. Например менять год в заголовке статьи. Так она будет всегда актуальной. Допустим “Как установить плагины в Wordpress [год]” И вместо [год] будет подставляться 2016, 2017 и т.д. Вставлять значения пользовательских полей.
Так как большинство веб-мастеров используют два плагина All in One Seo и Yoast, то рассмотрим на их примере.
Изменение заголовков и описаний с помощью пользовательских полей (Custom fields) в Yoast Seo
Тут на самом деле всё просто. Разработчики предусмотрели возможность вставлять шаблоны метаописаний.
Например их можно задать в шаблоне плагина (version – имя пользовательского поля):
Полный список шаблонов на официальном сайте плагина:
https://kb.yoast.com/kb/yoast-wordpress-seo-titles-metas-template-variables/
Изменение заголовков и описаний в All in One Seo средствами PHP и
Custom fields
По-умолчанию в данном плагине это сделать не так-то просто. Никаких встроенных инструментов плагин не даёт. Придётся применять php-сниппеты.
Используем исходную информацию по плагину http://4coder.info/en/blog/2011/all-in-one-seo-pack-customization/
Начнём с простого. Допишем в конец тайтла всех записей какое-то слово (например World!):
add_filter('aioseop_title_page','my_custom_title'); function my_custom_title($text) { $mytext = 'World!'; //задаём свой текст $text .= $mytext; //"склеиваем" исходный Title и свой текст return $text; //выводим текст }
(данный сниппет нужно добавлять в файл Function.php).
Тоже самое делаем для Description:
add_filter('aioseop_description','my_custom_description'); function my_custom_description($text) { $mytext = 'World!'; //задаём свой текст $text .= $mytext; //"склеиваем" исходный Description и свой текст return $text; //выводим текст }
Теперь допишем в конец описания значение какого-нибудь пользовательского поля (custom fields). Если это сайт про онлайн-игры, то в пользовательское поле можно вписать номер версии игры и просто меняя номер версии при редактировании записи, менять её везде – в заголовке, описании, тексте поста и т.д.
Допустим Title “Скачайте игру Покемоны версия <тут подставляем версию>”
И Description “На нашем сайте вы всегда можете скачать Покемоны <тут подставляем версию>”
Пример для описания:
add_filter('aioseop_description','my_custom_description'); function my_custom_description($text) { global $post; $mycustomseo = get_post_meta($post->ID, 'my_custom_field', true);//получаем значение пользовательского поля my_custom_field $text .= $mycustomseo; //"склеиваем" исходный Description и пользовательское поле return $text; //выводим текст }
Изменение сеозаголовков и описаний All in One Seo + Woocommers
Прежде всего почему мы используем связку All in One Seo + Woocommers? Потому что он уже был установлен на сайте. Хотя в Yoast проблема добавления пользовательских полей в описание решается намного проще и выше описана.
Так как в Woocommers не записи, а товары, то в сниппете нужно использовать не $post, а $product.
add_filter('aioseop_description','my_custom_description'); function my_custom_description($text) { global $product; $mycustomseo = get_the_terms($product->ID, 'pa_my_custom_field');//получаем значение пользовательского поля my_custom_field $text .= $mycustomseo; //"склеиваем" исходный Description и пользовательское поле return $text; //выводим текст }
Конкретный пример. Был сайт по продаже контрольных работ. В каждой контрольной были разные варианты и покупатель мог выбрать какой именно вариант контрольной он хочет купить. Естественно это был один товар и его Title выглядел примерно так:
“Контрольная по математике для 1 курса варианты 01, 03, 12”
Товаров таких было много, варианты постоянно добавлялись и было необходимо оперативно менять эти варианты сразу в тексте-описании, заголовке и сео-описании. Так как значения вариантов хранились в пользовательском поле ‘variant’ был составлен сниппет переписывающий заголовок:
add_filter('single_post_title','my_custom_product_title'); function my_custom_product_title($text) { global $product; $versionvalues = get_the_terms( $product->id, 'pa_variant'); if (!empty($versionvalues)) { $mycustomseo = ' Вариант '; $end_element = array_pop($versionvalues);//изымаем последний элемент, присваиваем его значение переменной foreach ( $versionvalues as $versionvalue) { $mycustomseo .= $versionvalue->name; $mycustomseo .= $versionvalue->value;// делаем что-либо с первыми... $mycustomseo .= ', '; } $mycustomseo .= $end_element->name; $mycustomseo .= $end_element->value; // делаем что-либо с последним элементом... } $text .= $mycustomseo; return $text; }
Здесь мы записываем исходный title в переменную $text, получаем массив значений всех вариантов $versionvalues, потом изымаем из него последний элемент $end_element (после него не нужна запятая) и в цикле foreach склеиваем это всё в одну строку, проставляя пробелы и запятые.
Здравствуйте.
Допишем в конец тайтла всех страниц какое-то слово (например в Москве.):
add_filter(‘aioseop_title_page’,’my_custom_title’);
global $page;
function my_custom_title($text) {
$mytext = ‘ в Москве.’; //задаём свой текст
$text .= $mytext; //”склеиваем” исходный Title и свой текст
return $text; //выводим текст
}
А как не выводить на нужных страницах? Что нужно дописать?
С уважением.
Например, добавить условие типа !is_single (17,232,411), !is_page (17,232,411) или !is_product(17,232,411). В зависимости от конкретных потребностей.
Благодарю Вас.