» » » Title, description, keywords и h1 для категорий товаров Woocommerce
logotip

Title, description, keywords и h1 для категорий товаров Woocommerce

Всем привет! Сегодня на seo-ayak.com по многочисленным просьбам читателей я начну разбирать плагин Woocommerce.

Не люблю я плагины, тем более те, что свои таблицы в БД создают, но Woocommerce, конечно, исключение, так как это не обычный плагин, а целый отдельный движок, со своим кодексом.

Плагин очень популярен и думаю вполне заслуженно, но как во всех движках в нем есть много недоработок, которые мы и будем пытаться исправить.

У меня нет действующего интернет-магазина на Woocommerce, но я его создал на локальном сервере (как создать локальный сервер) и теперь буду над ним издеваться в свое удовольствие.

Сегодня, так сказать, по горячим следам, я расскажу как вывести отдельные: title, description, keywords и h1 для категорий товаров Woocommerce. Поехали!

Мета-поля на странице редактирования категории Woocommerce

Надо сказать, что в Woocommerce, также как и в самом WordPress, предусмотрено масса различных хуков, с помощью которых, не трогая код плагина, можно воздействовать на его функционал.

Для вывода мета-полей на странице редактирования категорий товаров мы будем использовать хук product_cat_edit_form_fields.

Открываем для редактирования файл functions.php, что находится в папке с темой и вставляем такую функцию.

/* Мета-поля для категорий товаров */
add_action("product_cat_edit_form_fields", 'mayak_meta_product_cat ');
function mayak_meta_product_cat($term){
	?>
		<tr class="form-field">
			<th scope="row" valign="top"><label>Заголовок (title)</label></th>
			<td>
				<input type="text" name="mayak[title]" value="<?php echo esc_attr( get_term_meta( $term->term_id, 'title', 1 ) ) ?>"><br />
				<p class="description">Не более 60 знаков, включая пробелы</p>
			</td>
		</tr>
		<tr class="form-field">
            <th scope="row" valign="top"><label>Краткое описание (description)</label></th>
			<td>
				<input type="text" name="mayak[description]" value="<?php echo esc_attr( get_term_meta( $term->term_id, 'description', 1 ) ) ?>"><br />
				<p class="description">Краткое описание (description)</p>
			</td>
		</tr>
		<tr class="form-field">
			<th scope="row" valign="top"><label>Заголовок h1</label></th>
			<td>
				<input type="text" name="mayak[h1]" value="<?php echo esc_attr( get_term_meta( $term->term_id, 'h1', 1 ) ) ?>"><br />
				<p class="description">Заголовок страницы</p>
			</td>
		</tr>
		<tr class="form-field">
			<th scope="row" valign="top"><label>Ключевые слова</label></th>
			<td>
				<input type="text" name="mayak[keywords]" value="<?php echo esc_attr( get_term_meta( $term->term_id, 'keywords', 1 ) ) ?>"><br />
				<p class="description">Ключевые слова (keywords)</p>
			</td>
		</tr>
	<?php
}

Если кто делал мета-поля для обычных категорий WordPress по моей статье, то наверное обратили внимание, что функция отличается только названием и хуком, поэтому вторую функцию можно не создавать, а просто подключить хук product_cat_edit_form_fields.

В итоге на странице редактирования категорий товаров должно появиться четыре новых поля:

Теперь нам надо сохранить данные в БД. Для это вставляем еще одну функцию:

/* Сохранение данных в БД */
add_action('edited_product_cat', 'mayak_save_meta_product_cat');  
add_action('create_product_cat', 'mayak_save_meta_product_cat');
function mayak_save_meta_product_cat($term_id){
	if (!isset($_POST['mayak']))
		return;
	$mayak = array_map('trim', $_POST['mayak']);
	foreach($mayak as $key => $value){
		if(empty($value)){
			delete_term_meta($term_id, $key);
			continue;
		}
		update_term_meta($term_id, $key, $value);
	}
	return $term_id;
}

Эта функция тоже отличается только названием и хуками, здесь также можно не создавать лишнего, а просто подключить хуки edited_product_cat и create_product_cat.

На этом сходства заканчиваются. Идем дальше.

Title для категорий товаров Woocommerce

Также, как в случаи со стандартными категориями WordPress, мы просто подменим title Woocommerce на свой.

В Woocommerce, впрочем как и в WordPress, для вывода title на страницах категорий товаров используется функция single_term_title(), в которой предусмотрен одноименный хук single_term_title, его-то мы и будем использовать для вывода своего title.

Вставляем ниже в файл functions.php:

/* Вывод title для категорий товаров */
add_filter('single_term_title', 'mayak_filter_single_cat_title', 10, 1);
add_filter( 'single_term_title', 'mayak_poduct_cat_title', 10, 1); 
function mayak_filter_single_cat_title() {
    $pci =  get_queried_object()->term_id;
    return get_term_meta ($pci, 'title', true);
}
function mayak_poduct_cat_title($pct){
    if(empty($pct)){
	    $pc_id =  get_queried_object()->term_id;
	    $pct = get_cat_name($pc_id);
	}
	return $pct;
}

Если поле title по каким-то причинам окажется незаполненным, то заголовок title будет выводится по умолчанию, т.е. из названия категории.

Заголовок h1 для категорий товаров Woocommerce

Категории Woocommerce обиженны ничуть не меньше стандартных категорий, может за исключением возможности вывода изображения, мало того, что такие страницы сложно продвигать, это еще неправильно с коммерческой точки зрения.

В конце концов h1 предназначен больше для пользователей и заголовок целой рубрики должен отличаться от названия в меню и давать белее развернутое представление о странице.

Сегодня мы исправим эту ситуацию. Функция:

/* Вывод h1 для категорий товаров */
add_filter('woocommerce_show_page_title' , 'mayak_woocommerce_product_cat_h1' , 10 , 2); 
function mayak_product_cat_name(){
	$wpc_id =  get_queried_object()->term_id;
	$pcn = get_cat_name($wpc_id);
    echo '<h1 class="woocommerce-products-header__title page-title">'.$pcn.'</h1>'; 
}
function mayak_product_cat_h1($pch){
	$pch = get_term_meta (get_queried_object()->term_id, 'h1', true);
    echo '<h1 class="woocommerce-products-header__title page-title">'.$pch.'</h1>';
	if(empty($pch)){
	   echo	mayak_product_cat_name($pcn);
	}
}
function mayak_woocommerce_product_cat_h1(){ 
    return  mayak_product_cat_h1();     
};

Здесь также предусмотрен вывод заголовка h1 из названия категории товаров в случаи, если поле h1 по каким-то причинам окажется пустым.

В Woocommerce есть хук woocommerce_show_page_title, который срабатывает перед выводом заголовка из названия на экран и если это хук задействован, то заголовок из названия уже браться не будет, а будет выводится наш h1.

Очень удобный хук, в сборке WordPress такого нет.

В функции для h1 я задал css-классы, взятые из самого плагина, но если есть необходимость, можно вписать свои.

Отделенный description для категорий Woocommerce

Тут я не буду вдаваться в подробности, скажу лишь, что, если поле «Краткое описание» не будет заполнено, то description будет выведен по умолчанию, т.е. взят из описания категории.

/* Вывод description для категорий товаров */
add_action('wp_head', 'mayak_description_product_cat', 1, 1);
function mayak_description_product_cat(){
	if(is_product_category()){ 
	$pcd = get_term_meta (get_queried_object()->term_id, 'description', true);
	if(!empty($pcd)){
	$meta = '<meta name="description"  content="'.$pcd.'"/>'."\n";
	}
    else {		   
	   $pcd = wp_filter_nohtml_kses(substr(category_description(), 0, 280));
	   $meta = '<meta name="description"  content="'.$pcd.'"/>'."\n";	   
	}
	echo $meta;
	}
}

У нас осталось вывести ключевые слова. Кто-то может сказать, что поле keywords можно и не делать и отчасти они правы, но только отчасти, так как Яндекс и другие менее значительные поисковики возможно, повторяю, возможно, учитывают ключевые слова, если они составлены по правилам.

Поэтому и нам не стоит пренебрегать keywords.

Keywords для категорий товаров Woocommerce

Функция простая и расписывать тут нечего:

/* Вывод keywords для категорий товаров */
add_action('wp_head', 'mayak_keywords_product_cat', 1, 1);
function mayak_keywords_product_cat(){
	if(is_product_category()){
	$pck = get_term_meta (get_queried_object()->term_id, 'keywords', true );
	$aut = '<meta name="keywords" content="'.$pck.'">'."\n";
	}
	echo $aut;
}

На этом у меня все. Если что-то не получается, пишите в комментариях, постараюсь помочь и подписывайтесь на обновления блога, будет интересно!

До встречи!

С уважением, Виталий Кириллов

Статьи по теме:

Title, description, keywords и h1 для категорий (рубрик) WordPress
Картинки для категорий (рубрик) — изображения WordPress
Редактор для категорий (рубрик), меток и произвольных таксономий
Шаблоны для категорий WordPress. Как сделать каталог из рубрики
Категории WordPress — термы и таксономии
wp_list_categories() — как выводить рубрики WordPress

Комментарии: 4

  1. Kowalski:

    Виталий, зря вы плагины не любите. Многие приносят много пользы и никакого торможения, как некоторые говорят 😀

    Ответить
    • Виталий Кириллов:

      Дело в том, что WordPress постоянно обновляется и некоторые плагины просто не успевают за этими обновлениями, что приводит к разным проблемам.
      Также некоторые плагины после удаления плохо за собой подчищают, оставляя таблицы в БД и прочие хвосты.
      Про различные конфликты я вообще молчу.
      Тут опять же плагин плагину рознь…

      Ответить
  2. Егор:

    Здравствуйте, Виталий. Давно пора разобрать Woocommerce WordPress. Буду следить за обновлениями статей. Кстати, не пробовали Open Server вместо Denver? Намного интересней сервак, и обновляется по мере выхода PHP версий и прочего. Альтернатива данным кодам Yoast Woocommercе по моему?

    Ответить
    • Виталий Кириллов:

      Здравствуйте Егор!
      Насколько я знаю h1 Yoast Woocommercе не выводит.
      Что касается Open Server, просто не пробовал, возможно стоит.

      Ответить

Оставить комментарий

Внимание комментатор! Прежде чем вставить: HTML, JavaScript или PHP код в свой комментарий, преобразуй его в html сущность!

Subscribe without commenting

» Подписаться на комментарии по RSS