Перейти к содержимому



Title подкатегории и под подкатегории

#1 Jean

Jean
  • Пользователь PRO
  • 1 237 сообщений
  • Репутация: 218
0

Отправлено 03 Февраль 2014 - 15:48

Доброго времени.
Есть проблема с корректным отражением title в WP
На данный момент он составляется так
Категория-Название сайта
Запись - Категория - Название сайта

А вот если я создаю подкатегорию, то тут уже проблема

Подкатегория-Название сайта
Запись-Название сайта

А хотелось бы:
Запись-Подкатегория-Категория-Название сайта

Что очень не удобно когда это к примеру подкатегория товара.
Подскажите как исправить?

 

 

Сообщение отредактировал Jean: 03 Февраль 2014 - 21:38
для большей доходчивости

  • 0
Научу вас Seo оптимизировать и продвигать сайт, стоимость от 150р час, теория+практика
Консультирую по Интернет рекламе


#2 Игорян

Игорян
  • Пользователь
  • 296 сообщений
  • Репутация: 10

Отправлено 03 Февраль 2014 - 20:43

Думаю, плагин "All In One SEO Pack" решит вашу проблему. Если конечно я правильно понял чего вы хотите.

Изображение

Сообщение отредактировал Игорян: 03 Февраль 2014 - 20:45

  • 0

#3 Jean

Jean
    Topic Starter
  • Пользователь PRO
  • 1 237 сообщений
  • Репутация: 218

Отправлено 03 Февраль 2014 - 21:37

Не уж то ни одного программера на форуме нет? или не сталкивались?


Игорян, конечно не правильно, ибо тема даже не в Seo разделе создана...
  • 0
Научу вас Seo оптимизировать и продвигать сайт, стоимость от 150р час, теория+практика
Консультирую по Интернет рекламе


#4 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 04 Февраль 2014 - 11:13

Приветствую.
Заинтересовала задача, решил попробовать набросать функцию. Функцию помещаем в файл functions:
function nav_title(){
// строка для title
$nav_title = '';
// разделитель
$sep = ' - ';
// если главная страница
if( is_home() || is_front_page() ){
  echo get_bloginfo('name');
  return;
}
// если страница метки
if( is_tag() ){
  echo single_tag_title('', false) . $sep . get_bloginfo('name');
  return;
}
// если результаты поиска
if( is_search() ){
  echo "Результаты поиска: " . get_search_query();
  return;
}
// если не категория, тогда название берем из wp_title
if(!is_category()){
  $nav_title .= wp_title('', false) . $sep;
}
// получаем массив категории поста
$category = get_the_category();
// ID категории
$cat_id = $category[0]->cat_ID;
// если есть ID
if($cat_id){
  // пробуем получить родительские категории
  $categories = get_category_parents($cat_id);
  // удаляем слеш в конце
  $categories = rtrim($categories, '/');
  // получаем массив
  $categories = explode('/', $categories);
  // меняем порядок элементов на обратный
  $categories = array_reverse($categories);
  // формируем строку
  $nav_title .= implode($sep, $categories);
  // добавляем разделитель
  $nav_title .= $sep;
}
$nav_title .= get_bloginfo('name');
echo $nav_title;
}

В тайтле шаблона header вызываем функцию:
<title><?php nav_title(); ?></title>
Функцию тестировал на простенькой теме на компонентах страницы / записи / категории / подкатегории / метки / поиск. Все работает. Если нужны какие-то дополнительные компоненты, тогда нужно расширять функцию.
Чуть позже, наверное, перепишу функцию, сделав ее более универсальной и пригодной не только для тайтла, но и для хлебных крошек.
  • 0


#5 Jean

Jean
    Topic Starter
  • Пользователь PRO
  • 1 237 сообщений
  • Репутация: 218

Отправлено 05 Февраль 2014 - 09:34

matroskin8, я не программист к сожалению) возможно что то ни так сделал

Parse error: syntax error, unexpected $end in /home/a8574/public_html/m.ru/wp-content/themes/Ms/functions.php on line 749

  • 0
Научу вас Seo оптимизировать и продвигать сайт, стоимость от 150р час, теория+практика
Консультирую по Интернет рекламе


#6 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 05 Февраль 2014 - 10:13

В ошибке сообщается, что где-то в районе 749-ой строки пропущена точка с запятой. До добавления моей функции эта точка с запятой была необязательна. Поэтому либо поставьте точку с запятой, либо поместите мою функцию в начало файла функциий... ну либо можете прикрепить файл функций и я гляну.
К слову, функцию уже переписал (поскольку предыдущая не лишена недостатков), остались некоторые мелочи. Если заинтересует, то смогу выложить чуть позже.
  • 0


#7 Jean

Jean
    Topic Starter
  • Пользователь PRO
  • 1 237 сообщений
  • Репутация: 218

Отправлено 05 Февраль 2014 - 10:14

matroskin8, Буду очень благодарен, выкладывайте. Кстати, а будет ли дружить ваша функция с плагинами seo оптимизации?
  • 0
Научу вас Seo оптимизировать и продвигать сайт, стоимость от 150р час, теория+практика
Консультирую по Интернет рекламе


#8 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 05 Февраль 2014 - 10:24

Никаких конфликтов с плагинами быть не должно (но нужно, конечно же, тестировать), поскольку функция использует стандартные теги WP для построения цепочки навигации для основных компонентов:
- Главная страница
- Страница метки
- Страница результатов поиска
- Страница 404
- Рубики
- Записи
- Отдельные страницы
- Для всех остальных возможных компонентов использован стандартный тег wp_title().
Сегодня чуть позже выложу функцию и прикреплю небольшую видео инструкцию.

Сообщение отредактировал matroskin8: 05 Февраль 2014 - 10:25

  • 0


#9 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 05 Февраль 2014 - 13:04

Новая функция:
function nav_title($breadcrumbs = false){
// $nav_title = array();
$sep = ' - ';
$site = get_bloginfo('name');
$site_url = home_url();
$home = "<a href='{$site_url}'>{$site}</a>";
if( is_home() || is_front_page() ){
  $nav_title = array($home);
}
elseif( is_tag() ){
  $nav_title = array( $home, single_tag_title('Метка: ', false) );
}
elseif( is_search() ){
  $nav_title = array( "Результаты поиска по запросу: " . get_search_query() );
}
elseif( is_404() ){
  $nav_title = array( $home, '404' );
}
elseif( is_category() ){
  $cat_id = get_query_var('cat');
  $cat = get_category($cat_id);
  if($cat->parent){
   $categories = rtrim(get_category_parents($cat_id, true, $sep), $sep);
   if(!$breadcrumbs){
	$categories = explode($sep, $categories);
	$categories = array_reverse($categories);
	$categories = implode($sep, $categories);
   }
   $nav_title = array($home, $categories);
  }else{
   $nav_title = array($home, $cat->name);
  }
}
elseif( is_single() ){
  $category = get_the_category();
  $cat_id = $category[0]->cat_ID;
  $categories = rtrim(get_category_parents($cat_id, true, $sep), $sep);
  $categories = explode($sep, $categories);
  $home_arr = array($home);
  $title = array(get_the_title());
  $nav_title = array_merge($home_arr, $categories, $title);
}
elseif( is_page() ){
  $nav_title = array($home, get_the_title());
}
else{
  $nav_title = wp_title( '/', false, 'right' );
  return rtrim($nav_title, ' /');
}
if(!$breadcrumbs){
  $nav_title = array_reverse($nav_title);
  $nav_title = implode($sep, $nav_title);
  $nav_title = strip_tags($nav_title);
}else{
  $nav_title = implode($sep, $nav_title);
}
return $nav_title;
}

Вызываем в теге title:
<title><?php echo nav_title(); ?></title>

Также функцию можно использовать для формирования хлебных крошек, вызывая в нужном месте шаблона и передавая параметром строку true:
<div class="breadcrumbs">
<?php echo nav_title(true); ?>
</div>

В видео ниже на всякий случай показал весь процесс с комментариями. С плагином All in One Seo функция не конфликтует. Однако, плагин полностью переписывает title и вставляет туда результат своей работы. Поэтому, как вариант, можно отключить переписыванияе плагином заголовков... ну, или копаться в коде плагина / писать свой плагин.
http://youtu.be/qRI9z7pTpLs

P.S. Видео почему-то на форуме проигрывается через раз, поэтому вот прямая ссылка на видео.

Сообщение отредактировал matroskin8: 05 Февраль 2014 - 13:11

  • 1


#10 Jean

Jean
    Topic Starter
  • Пользователь PRO
  • 1 237 сообщений
  • Репутация: 218

Отправлено 11 Февраль 2014 - 10:42

matroskin8

Кстати вы в примере что тут написали зачем то закомментировали код, в итоге он не работал)

function nav_title($breadcrumbs = false){//

Убрал и заработало)

Но есть проблема на блоге, где тема не совсем простая))

<title>Warning: rtrim() expects parameter 1 to be string, object given in /home/srv32044/lov2.me/wp-content/themes/lov21/functions.php on line 51Название сайта</title>

Файл [color=rgb(0,0,0);]functions[/color][color=rgb(102,102,0);].[/color][color=rgb(0,0,0);]php там от фреймверка) Скопировал с тем как я ставлю в код[/color]

<?php/** * Theme functions file * * DO NOT MODIFY THIS FILE. Make a child theme instead: http://codex.wordpress.org/Child_Themes * * @package ClassiPress * @author AppThemes */global $cp_options;// current version$app_theme = 'ClassiPress';$app_abbr = 'cp';$app_version = '3.3';$app_db_version = 1960;$app_edition = 'Ultimate Edition';// define rss feed urls$app_rss_feed = 'http://feeds2.feedburner.com/appthemes';$app_twitter_rss_feed = 'http://api.twitter.com/1/statuses/user_timeline.rss?screen_name=appthemes';$app_forum_rss_feed = 'http://forums.am/external.php?type=RSS2';// define the transients we use$app_transients = array($app_abbr.'_cat_menu');define( 'APP_TD', 'classipress' );// Frameworkrequire_once( dirname( __FILE__ ) . '/framework/load.php' );// Paymentsrequire_once( dirname( __FILE__ ) . '/includes/payments/load.php' );// Optionsrequire_once( dirname( __FILE__ ) . '/includes/theme-options.php' );scb_register_table( 'app_pop_daily', $app_abbr . '_ad_pop_daily' );scb_register_table( 'app_pop_total', $app_abbr . '_ad_pop_total' );APP_Mail_From::init();require_once( dirname( __FILE__ ) . '/framework/includes/stats.php' );if ( is_admin() )	require_once( dirname( __FILE__ ) . '/framework/admin/importer.php' );// Theme-specific filesrequire_once( dirname( __FILE__ ) . '/includes/theme-functions.php' );function nav_title($breadcrumbs = false){ $nav_title = array();$sep = ' - ';$site = get_bloginfo('name');$site_url = home_url();$home = "<a href='{$site_url}'>{$site}</a>";if( is_home() || is_front_page() ){  $nav_title = array($home);}elseif( is_tag() ){  $nav_title = array( $home, single_tag_title('Метка: ', false) );}elseif( is_search() ){  $nav_title = array( "Результаты поиска по запросу: " . get_search_query() );}elseif( is_404() ){  $nav_title = array( $home, '404' );}elseif( is_category() ){  $cat_id = get_query_var('cat');  $cat = get_category($cat_id);  if($cat->parent){   $categories = rtrim(get_category_parents($cat_id, true, $sep), $sep);   if(!$breadcrumbs){	$categories = explode($sep, $categories);	$categories = array_reverse($categories);	$categories = implode($sep, $categories);   }   $nav_title = array($home, $categories);  }else{   $nav_title = array($home, $cat->name);  }}elseif( is_single() ){  $category = get_the_category();  $cat_id = $category[0]->cat_ID;  $categories = rtrim(get_category_parents($cat_id, true, $sep), $sep);  $categories = explode($sep, $categories);  $home_arr = array($home);  $title = array(get_the_title());  $nav_title = array_merge($home_arr, $categories, $title);}elseif( is_page() ){  $nav_title = array($home, get_the_title());}else{  $nav_title = wp_title( '/', false, 'right' );  return rtrim($nav_title, ' /');}if(!$breadcrumbs){  $nav_title = array_reverse($nav_title);  $nav_title = implode($sep, $nav_title);  $nav_title = strip_tags($nav_title);}else{  $nav_title = implode($sep, $nav_title);}return $nav_title;}

  • 0
Научу вас Seo оптимизировать и продвигать сайт, стоимость от 150р час, теория+практика
Консультирую по Интернет рекламе


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru