Skip to content

Instantly share code, notes, and snippets.

@kay88
Created September 12, 2016 11:53
Show Gist options
  • Save kay88/586bdd4be3faf4436602b78d81856a37 to your computer and use it in GitHub Desktop.
Save kay88/586bdd4be3faf4436602b78d81856a37 to your computer and use it in GitHub Desktop.
Wordpress Title и метатеги без плагина
/** мета заголовок (title):
В function.php
------------------------------------- */
/** мета заголовок (title):
- Первый параметр функции это разделитель, второй название блога (если не указать берется из Настроек).
- Для меток и категорий указывается в настройках в описании (в настройках, по аналогии с пунком 6 Platinum SEO Pack, см. выше) так: [title=Заголовок]
- Для страниц или постов, если вы хотите чтобы заголовок страницы отличался от заголовка поста, то создайте произвольное поле title и впишите туда свое название
------------------------------------- */
function kama_meta_title ($sep=" | ",$bloginfo_name=''){
global $wp_query,$post;
if (!$bloginfo_name) $bloginfo_name = get_bloginfo('name');
$wp_title = wp_title($sep, 0, 'right');
if (is_category() || is_tag()){
$desc = $wp_query->queried_object->description;
if ($desc) preg_match ('!\[title=(.*)\]!iU',$desc,$match);
$out = $match[1] ? $match[1].$sep : ((is_tag())?"Метка:":"Категория:")." $wp_title";
}
elseif (is_singular()) $out = ($free_title = get_post_meta($post->ID, "title", true)) ? $free_title.$sep : $wp_title;
elseif (is_author()) $out = "Статьи автора: $wp_title";
elseif (is_day() || is_month() || is_year()) $out = "Архив за: $wp_title";
elseif (is_search()) $out = 'Результаты поиска по запросу: '. strip_tags($_GET['s']) . $sep;
elseif (is_404()) $out = "Ошибка 404 - страница не существует".$sep.$wp_title;
$out = trim($out.$bloginfo_name);
if ($paged = get_query_var('paged')) $out = "$out (страница $paged)";
return print $out;
}
/** мета описание (description):
- Для главной страницы описание указывается в функции, так: kama_meta_description ('Здесь описание блога');
- Для страниц меток и категорий указывается в описании (в настройках, по аналогии с пунком 6 Platinum SEO Pack, см. выше), так: [description=текст, описание]
- У постов сначала проверяется, произвольное поле description, если оно есть описание берется оттуда, потом проверяется поле "цитата", если цитаты нет, то описание берется как начальная часть контента.
- вторым параметром в функции указывается колличество символов для описания: kama_meta_description ('Описание для главной страницы',200);
------------------------------------- */
function kama_meta_description ($home_description='',$maxchar=200){
global $wp_query,$post;
if (is_singular()){
if ( $descript = get_post_meta($post->ID, "description", true) )
$out = $descript;
elseif ($post->post_excerpt!='')
$out = trim(strip_tags($post->post_excerpt));
else
$out = trim(strip_tags($post->post_content));
$char = iconv_strlen( $out, 'utf-8' );
if ( $char > $maxchar ) {
$out = iconv_substr( $out, 0, $maxchar, 'utf-8' );
$words = split(' ', $out ); $maxwords = count($words) - 1; //убираем последнее слово, ибо оно в 99% случаев неполное
$out = join(' ', array_slice($words, 0, $maxwords)).' ...';
}
}
elseif (is_category() || is_tag()){
$desc = $wp_query->queried_object->description;
if ($desc) preg_match ('!\[description=(.*)\]!iU',$desc,$match);
$out = $match[1]?$match[1]:'';
}
elseif (is_home()) $out=$home_description;
if ($out){
$out = str_replace( array("\n","\r"), ' ', strip_tags($out) );
$out = preg_replace("@\[.*?\]@", '', $out); //удаляем шоткоды
return print "<meta name='description' content='$out' />\n";
}
else return false;
}
/** метатег keywords:
- Для главной страницы, ключевые слова указываются в функции так: kama_meta_keywords ('слово1, слово2, слово3');
- Также можно вписать ключевые слова во второй параметр, они будут отображаться (добавляться) на всех страницах сайта: kama_meta_keywords ('<ключевики для главной>','<сквозные ключевики>');
- Чтобы задать свои keywords для записи, создайте произвольное поле keywords и впишите в значения необходимые ключевые слова. Если такого поля у записи нет, то ключевые слова генерируются из меток и названия категории(й).
- Для страниц меток и категорий ключевые слова указываетются в описании (в настройках, по аналогии с пунком 6 Platinum SEO Pack, см. выше) так: [keywords=слово1, слово2, слово3]
------------------------------------- */
function kama_meta_keywords ($home_keywords='',$def_keywords=''){
global $wp_query,$post;
if ( is_single() && !$out=get_post_meta($post->ID,'keywords',true) ){
$out = '';
$res = wp_get_object_terms( $post->ID, array('post_tag','category'), array('orderby' => 'none') ); // получаем категории и метки
if ($res) foreach ($res as $tag) $out .= " {$tag->name}";
$out = str_replace(' ',', ',trim($out));
$out = "$out $def_keywords";
}
elseif (is_category() || is_tag()){
$desc = $wp_query->queried_object->description;
if ($desc) preg_match ('!\[keywords=(.*)\]!iU',$desc,$match);
$out = $match[1]?$match[1]:'';
$out = "$out $def_keywords";
}
elseif (is_home()){
$out = $home_keywords;
}
if ($out) return print "<meta name='keywords' content='$out' />\n";
return false;
}
/** метатег robots:
- Чтобы задать свои атрибуты метатега robots ДЛЯ ЗАПИСИ или СТРАНИЦЫ, создайте произвольное поле robotsmeta со значением необходимых атрибутов (например, чтобы закрыть от индексации страницу или пост нужно создать произвольное поле robotsmeta со значением noindex,nofollow)
- По умолчанию не индексируются страницы поиска и архив за день, страница входа на сайт и регистрации, а так же RSS фиды, чтобы разрешить или запретить индексацию групп/типов (страницы меток, авторов и т.п.) раскомментируйте (уберите # ниже в коде).
----------------------------------------- */
function kama_meta_robots ($out = "index,follow"){
global $post;
$eURL = $_SERVER['REQUEST_URI'];
if ( // раскомментируйте нужные строки ниже - раскомментировано значит закрыто от индексации
#is_category() || // категории
#is_tag() || // метки
#is_author() || // архив автора
#is_year() || // архив за год
#is_month() || // архив за месяц
is_day() || // архив за день
strpos($eURL, '/wp-login.php') !== false || // страница входа на сайт
strpos($eURL, '/wp-register.php') !== false || // страница регистрации
#strpos($eURL, '/comment-page') !== false || // страницы комментариев
is_search() || // страница поиска
is_feed() // rss фиды
) $out = "noindex,nofollow";
if (is_singular() && $robots = get_post_meta($post->ID,'robotsmeta',true))
$out = $robots;
return print "<meta name='robots' content='$out' />\n";
}
/*-----------------------------------------------------в шаблон -----------------------------------------------------*/
/*--------------- В описание "Рубрики" ---------------*/
[title=Заголовок рубрики]
[description=описание рубрики]
[keywords=слово1, слово2, слово3]
/*--------------- шаблон.php ---------------*/
<title><?php kama_meta_title (" | "); ?></title>
<?php kama_meta_description () ?>
<?php kama_meta_keywords () ?>
<?php kama_meta_robots () ?>
/*--------------- Как оптимизировать главную страницу блога ---------------*/
function kama_meta_title ($sep=" | ",$bloginfo_name='Название моего блога'){
***
function kama_meta_description ($home_description='Описание главной страницы блога',$maxchar=200){
***
function kama_meta_keywords ($home_keywords='Ключевые слова главной страницы',$def_keywords=''){
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment