Идет загрузка.
Пожалуйста, подождите

Произвольные мета-теги title, description, keywords для записей и страниц

Материал обновлен: 10.08.2017

По умолчанию, WordPress в title использует заголовок записи или страницы, а в description — описание самого блога (в настройках) или выжимку из содержимого, для keywords не используется ровным ничего, кроме того, что вы сами пропишите в этом мета-теге. Данный подход, естественно, не всегда оправдан и не способствует улучшению SEO.

Конечно, можно использовать Advanced Custom Field (ACF) или SEO плагины. Но каждый плагин обладает дополнительными возможностями, которые не всегда нужны. Поэтому, предлагаем следующий вариант решения проблемы: использование метабокса произвольных полей WordPress для красивого и функционального отображения полей для заполнения мета-тегов title, description, keywords.

Для активации метабокса произвольных полей будем использовать следующую функцию:

add_meta_box( $id, $title, $callback, $screen, $context, $priority, $callback_args );

Параметры

$id (string, обязательный)
id контейнера
$title (string, обязательный)
Название блока. Отображается в админке.
$callback (callable, обязательный)
Функция, которая выводит содержание блока.
$screen (string | array | WP_Screen, необязательный, по умолчанию: null)
Экран или экраны где должен отображаться блок.
Например: post или page.
Несколько типов можно указать в массиве: array(‘post’, ‘page’).
$context (string, необязательный, по умолчанию: ‘advanced’)
Место отображения блока: normal, advanced или side.
$priority (string, необязательный, по умолчанию: ‘default’)
Приоритет показа блока:
high — выше
low — ниже
$callback_args (array, необязательный, по умолчанию: null)
Данные, которые должны быть установлены как аргументы ($args) массива box (это второй параметр, передаваемый обратному вызову).

Итак, начнем:

// активируем метабокс
add_action('add_meta_boxes', 'add_wo_meta_tags', 1);
function add_wo_meta_tags() {
   add_meta_box('wo_meta_tags', 'Мета-теги', 'func_wo_meta_tags', 'post', 'normal', 'high');
}

// содержимое метабокса
function func_wo_meta_tags( $post ){ 
?>
<p>Title<br/>
<input type="text" name="wo_meta[title]" value="<?php echo get_post_meta($post->ID, 'title', 1); ?>" style="width:70%"/>
</p>

<p>Description<br/>
<textarea type="text" name="wo_meta[description]" style="width:70%;height:50px;"><?php echo get_post_meta($post->ID, 'description', 1); ?></textarea>
</p>

<p>Keywords (через запятую)<br/>
<input type="text" name="wo_meta[keywords]" value="<?php echo get_post_meta($post->ID, 'keywords', 1); ?>" style="width:70%"/>
</p>
   
// проверка при сохранении
<input type="hidden" name="wo_meta_tags_empty" value="<?php echo wp_create_nonce(__FILE__); ?>" />

<?php
}

// сохраняем
add_action('save_post', 'wo_meta_tags_save', 0);

function wo_meta_tags_save( $post_id ){
   if ( !isset($_POST['wo_meta_tags_empty']) || !wp_verify_nonce($_POST['wo_meta_tags_empty'], __FILE__) ) return false;
     if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE  ) return false;
       if ( !current_user_can('edit_post', $post_id) ) return false;
         if( !isset($_POST['wo_meta']) ) return false; 
	   $_POST['wo_meta'] = array_map('trim', $_POST['wo_meta']);
	   foreach( $_POST['wo_meta'] as $key=>$value ){
             if( empty($value) ){
	       delete_post_meta($post_id, $key);
	       continue;
	     }
             update_post_meta($post_id, $key, $value);
	   }
	   return $post_id;
}

Код необходимо добавить в functions.php

Немного усовершенствуем код. Добавим скрипт подсчета символов для более корректного отображения в поисковой выдаче. Для этого добавим id к заголовкам и полям title и description и напишем сам скрипт.

// активируем метабокс
add_action('add_meta_boxes', 'add_wo_meta_tags', 1);
function add_wo_meta_tags() {
   add_meta_box('wo_meta_tags', 'Мета-теги', 'func_wo_meta_tags', 'post', 'normal', 'high');
}

// содержимое метабокса
function func_wo_meta_tags( $post ){ 
?>
<p>Title<span id="count_title"></span><br/>
<input type="text" name="wo_meta[title]" value="<?php echo get_post_meta($post->ID, 'title', 1); ?>" style="width:70%" id="count_title_text">>
</p>

<p>Description<span id="count_description"><br/>
<textarea type="text" name="wo_meta[description]" style="width:70%;height:50px;" id="count_description_text"><?php echo get_post_meta($post->ID, 'description', 1); ?></textarea>
</p>

<p>Keywords (через запятую)<br/>
<input type="text" name="wo_meta[keywords]" value="<?php echo get_post_meta($post->ID, 'keywords', 1); ?>" style="width:70%">
</p>
   
// проверка при сохранении
<input type="hidden" name="wo_meta_tags_empty" value="<?php echo wp_create_nonce(__FILE__); ?>" />

<?php
}

// сохраняем
add_action('save_post', 'wo_meta_tags_save', 0);

function wo_meta_tags_save( $post_id ){
   if ( !isset($_POST['wo_meta_tags_empty']) || !wp_verify_nonce($_POST['wo_meta_tags_empty'], __FILE__) ) return false;
     if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE  ) return false;
       if ( !current_user_can('edit_post', $post_id) ) return false;
         if( !isset($_POST['wo_meta']) ) return false; 
	   $_POST['wo_meta'] = array_map('trim', $_POST['wo_meta']);
	   foreach( $_POST['wo_meta'] as $key=>$value ){
             if( empty($value) ){
	       delete_post_meta($post_id, $key);
	       continue;
	     }
             update_post_meta($post_id, $key, $value);
	   }
	   return $post_id;
}

// подключим скрипт
if( is_admin() ){
   add_action('admin_print_footer_scripts', 'wo_meta_tags_count', 99);
     function wo_meta_tags_count(){
?>
<script type="text/javascript">
jQuery(document).ready(function($){
   $('input[id="count_title_text"]').keyup(function count(){
     number = $('input[id="count_title_text"]').val().length;
     $('#count_title').html('['+number+' из 70]');
   });
   $('#count_description_text').keyup(function count(){
     number = $('#count_description_text').val().length;
     $('#count_description').html('['+number+' из 150]');
   });
});
</script>
<?php
     }
}

Теперь выведем значение мета-тегов в head.

<?php
// готовим переменные
$wo_title = get_post_meta($post->ID, 'title', true);
$wo_description = get_post_meta($post->ID, 'description', true);
$wo_keywords = get_post_meta($post->ID, 'keywords', true);
?>

<title><?php echo $wo_title; ?></title>
<meta name="description" content="<?php echo $wo_description; ?>">
<meta name="keywords" content="<?php echo $wo_keywords; ?>">
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (оценок: 6, в среднем: 5,00 из 5)
Загрузка...

Материал оказался полезным?
Поблагодарите авторов за старание и таких материалов будет больше.





Категория: Оптимизация
Теги: , ,

32 0
10.08.2017


Комментарии

Комментариев пока нет

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

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