- Хлібні крихти з мікророзмітки RDF
- Код виклику функції хлібних крихт
- Стилі для хлібних крихт
- Інструмент перевірки структурованих даних Google
- Хлібні крихти з мікроразмекой Schema.org
Всім привіт! Близько року тому, на seo-mayak.com , Я опублікував статтю як зробити хлібні крихти без плагіна .
При всіх плюсах, а це невеликий обсяг і простота установки, код має ряд мінусів. Він не виводить хлібні крихти на сторінках з категоріями, архівами, мітками, на статичних сторінках WordPrewss і т.д, а діє тільки на сторінках із записами ..
Надалі я отримував багато листів із запитаннями, як доповнити код, щоб виправити вищеописаний недолік.
Я витратив багато часу, на пошук оптимального рішення, але мої знання PHP, не дозволяли мені впоратися з поставленим завданням.
Але час йде і я навчаюся. Звичайно, я не можу сказати, що опанував таким складним мовою, але за допомогою зразків, шпаргалок і недужий терпіння, у мене стало дещо вийдуть. Не так давно я написав обробник для форми зворотного зв'язку і це був мій перший великий успіх в PHP.
Ще деякі читачі дуже просили додати в хлібні крихти дані мікророзмітки. Ну що ж, звичайно не без зусиль, але я постарався виконати і це прохання.
На замітку! Мікророзмітки - це семантична оптимізація сайтів, із застосуванням спеціалізованих стандартів (мікроформатів), які підтримують всі провідні пошукові системи.
Я зараз не буду вдаватися в подробиці, скажу лише, що стандартів мікророзмітки кілька і цій темі я обов'язково присвячу окрему статтю.
У даній функції хлібних крихт я використовував мікроформат або правильніше буде сказати, мова передачі мікроданних, який називається - RDF.
На замітку! RDF розшифровується, як Resource Description Framework, що в перекладі з англ. - середовище опису ресурсів. RDF був розроблений Консорціумом Всесвітньої павутини і використовується для передачі мікроданних на обробку пошуковим роботам.
Дуже складно в двох словах дати «людське» визначення, без окремої статті тут точно не обійтися. А якщо Ви дочитаєте статтю до кінця, то дізнаєтеся, на що впливає мікророзмітки в хлібних крихтах.
Отже, представляю на Ваш суд функцію на PHP, яка здатна виводити хлібні крихти, як на сторінки з записами, так і на всі інші сторінки WordPress. Поїхали!
Хлібні крихти з мікророзмітки RDF
Для реалізації поставленого завдання, в першу чергу нам треба буде відкрити для редагування файл functions.php, що розташований в папці з темою.
При редагуванні файлів, раджу користуватися текстовим редактором Notepad ++ .
До речі, скоро я планую продовжити опис можливостей редактора і обов'язково розповім про те, як активувати в Notepad ++ функцію FTP клієнта, що дозволить редагувати файли прямо на сервері. .
Отже, відкриваємо файл functions.php і в самий кінець, перед знаком?>, Вставляємо наступну функцію:
/ *** Функція хлібних крихт *** / function mayak_breadcrumbs_new () {$ mayak_home = 'Головна'; // текст посилання "Головна" $ mayak_last_crumb = 1; // 1 - показувати назву поточної статті / сторінки / рубрики, 0 - не показувати $ mayak_between = '& raquo; '; $ Mayak_from = '<span class = "current-crumbs">'; $ Mayak_to = '</ span>'; global $ post; $ Mayak_link_to_home = home_url ( '/'); $ Mayak_from_court = '<span typeof = "v: Breadcrumb">'; $ Mayak_to_court = '</ span>'; $ Mayak_link_rdf = 'rel = "v: url" property = "v: title"'; $ Mayak_path = $ mayak_from_court. '<A'. $ Mayak_link_rdf. 'Href = "% 1 $ s">% 2 $ s </a>'. $ Mayak_to_court; $ Mayak_superior = $ descendant = $ post-> post_parent; $ Mayak_initial_page = get_option ( 'page_on_front'); if (is_home () || is_front_page ()) {echo '<div class = "block-crumbs"> <a href="'. $mayak_link_to_home.'">'. $ Mayak_home. '</a> </ div>'; } Else {echo '<div class = "block-crumbs" xmlns: v = "http://rdf.data-vocabulary.org/#">'; {Echo '<a href="'. $mayak_link_to_home.'" rel="v:url" property="v:title">'. $ Mayak_home. '</a>'; if ($ mayak_initial_page == 0 || $ mayak_superior! = $ mayak_initial_page) echo $ mayak_between; } If (is_category ()) {$ this_category = get_category (get_query_var ( 'cat'), false); if ($ this_category-> parent! = 0) {$ category = get_category_parents ($ this_category-> parent, TRUE, ''. $ mayak_between. ''); if ($ mayak_last_crumb == 1) $ category = preg_replace ( "# ^ (. +) $ mayak_between $ #", "$ 1", $ category); $ Category = str_replace ( '<a', $ mayak_from_court. '<A'. $ Mayak_link_rdf, $ category); $ Category = str_replace ( '</a>', '</a>'. $ Mayak_to_court, $ category); echo $ category; } If ($ mayak_last_crumb == 1) echo $ mayak_from. sprintf ( 'Категорія "'. single_cat_title ( '', false). '"'). $ mayak_to; } Elseif (is_search ()) {echo $ mayak_from. sprintf ( 'Результати пошуку для "'. get_search_query (). '"'). $ mayak_to; } Elseif (is_day ()) {echo sprintf ($ mayak_path, get_year_link (get_the_time ( 'Y')), get_the_time ( 'Y')). $ Mayak_between; echo sprintf ($ mayak_path, get_month_link (get_the_time ( 'Y'), get_the_time ( 'm')), get_the_time ( 'F')). $ mayak_between; echo $ mayak_from. get_the_time ( 'd'). $ mayak_to; } Elseif (is_month ()) {echo sprintf ($ mayak_path, get_year_link (get_the_time ( 'Y')), get_the_time ( 'Y')). $ Mayak_between; echo $ mayak_from. get_the_time ( 'F'). $ mayak_to; } Elseif (is_year ()) {echo $ mayak_from. get_the_time ( 'Y'). $ mayak_to; } Elseif (is_single () &&! Is_attachment ()) {if (get_post_type ()! = 'Post') {$ post_specimen = get_post_type_object (get_post_type ()); $ Sleaze = $ post_specimen-> rewrite; printf ($ mayak_path, $ mayak_link_to_home. '/'. $ sleaze [ 'sleaze']. '/', $ post_specimen-> labels-> singular_name); if ($ mayak_last_crumb == 1) echo $ mayak_between. $ Mayak_from. get_the_title (). $ Mayak_to; } Else {$ cat = get_the_category (); $ Cat = $ cat [0]; $ Category = get_category_parents ($ cat, TRUE, ''. $ Mayak_between. ''); if ($ mayak_last_crumb == 0) $ category = preg_replace ( "# ^ (. +) $ mayak_between $ #", "$ 1", $ category); $ Category = str_replace ( '<a', $ mayak_from_court. '<A'. $ Mayak_link_rdf, $ category); $ Category = str_replace ( '</a>', '</a>'. $ Mayak_to_court, $ category); echo $ category; if ($ mayak_last_crumb == 1) echo $ mayak_from. get_the_title (). $ Mayak_to; }} Elseif (! Is_single () &&! Is_page () && get_post_type ()! = 'Post' &&! Is_404 ()) {$ post_specimen = get_post_type_object (get_post_type ()); echo $ mayak_from. $ Post_specimen-> labels-> singular_name. $ Mayak_to; } Elseif (is_attachment ()) {$ superior = get_post ($ mayak_superior); $ Cat = get_the_category ($ superior-> ID); $ Cat = $ cat [0]; if ($ cat) {$ category = get_category_parents ($ cat, TRUE, ''. $ mayak_between. ''); $ Category = str_replace ( '<a', $ mayak_from_court. '<A'. $ Mayak_link_rdf, $ category); $ Category = str_replace ( '</a>', '</a>'. $ Mayak_to_court, $ category); echo $ category; } Printf ($ mayak_path, get_permalink ($ superior), $ superior-> post_title); if ($ mayak_last_crumb == 1) echo $ mayak_between. $ Mayak_from. get_the_title (). $ Mayak_to; } Elseif (is_page () &&! $ Mayak_superior) {if ($ mayak_last_crumb == 1) echo $ mayak_from. get_the_title (). $ Mayak_to; } Elseif (is_page () && $ mayak_superior) {if ($ mayak_superior! = $ Mayak_initial_page) {$ breadcrumbs = array (); while ($ mayak_superior) {$ page = get_page ($ mayak_superior); if ($ mayak_superior! = $ mayak_initial_page) {$ breadcrumbs [] = sprintf ($ mayak_path, get_permalink ($ page-> ID), get_the_title ($ page-> ID)); } $ Mayak_superior = $ page-> post_parent; } $ Breadcrumbs = array_reverse ($ breadcrumbs); for ($ i = 0; $ i <count ($ breadcrumbs); $ i ++) {echo $ breadcrumbs [$ i]; if ($ i! = count ($ breadcrumbs) -1) echo $ mayak_between; }} If ($ mayak_last_crumb == 1) {if ($ descendant! = 0 && $ descendant! = $ Mayak_initial_page) echo $ mayak_between; echo $ mayak_from. get_the_title (). $ mayak_to; }} Elseif (is_tag ()) {echo $ mayak_from. sprintf ( 'Записи з міткою "% s"', single_tag_title ( '', false)). $ Mayak_to; } Elseif (is_author ()) {global $ author; $ Userdata = get_userdata ($ author); echo $ mayak_from. sprintf ( 'Записи автора за% s', $ userdata-> display_name). $ Mayak_to; } Elseif (is_404 ()) {echo $ mayak_from. 'Помилка 404' . $ Mayak_to; } Elseif (has_post_format () &&! Is_singular ()) {echo get_post_format_string (get_post_format ()); } If (get_query_var ( 'paged')) {if (is_category () || is_day () || is_month () || is_year () || is_search () || is_tag () || is_author ()) echo '( '; echo' Сторінка '. get_query_var (' paged '); if (is_category () || is_day () || is_month () || is_year () || is_search () || is_tag () || is_author ()) echo ')'; } Echo '</ div>'; }} / *** Кінець функції хлібних крихт *** / Зберігаємо зміни і переходимо до наступного етапу.
Код виклику функції хлібних крихт
Далі відкриваємо одразу кілька файлів, які відповідають за виведення:
‣ записів (single.php),
‣ сторінок (page.php)
‣ архівів (archve.php),
‣ рубрик (category.php),
‣ міток (tag.php),
‣ сторінки пошуку (search.php),
‣ сторінки автора (author.php)
А також файл сторінки помилки 404 (404.php).
Якщо у Вашому шаблоні, відсутні деякі з перерахованих вище файлів, це нормально! Різні шаблони мають різний набір файлів, просто відкрийте ті, які є в представленому мною списку.
У відкритих файлах шукаємо щось схоже на сходинку:
<? Php if (have_posts ()): while (have_posts ()): the_post (); ?>І перед нею вставляємо код виклику функції:
<? Php mayak_breadcrumbs_new (); ?> Поробляє даних процедуру у всіх відкритих файлах.
Стилі для хлібних крихт
У функції я задав два класи. Клас block-crumbs відповідає за стилі всього блоку хлібних крихт, а клас current-crumbs за стилі останньої крихти, яка не є посиланням.
Я підготував мінімальний набір селекторів, для згаданих класів і постарався їм привласнити універсальні значення.
Відкриваємо файл style.css і в самий кінець вставляємо наступне:
/ *** Стилі для хлібних крихт *** / .block-crumbs {margin: 5px 25px; / * Зовнішні відступи від блоку * / padding-bottom: 5px; / * Нижній внутрішній відступ від блоку * / border-bottom: 2px solid # f2f2f2; / * Чорта під блоком * / color: # 215B9B; / * Колір посилань і тексту в блоці * /} .block-crumb a: hover, .block-crumb a: active {color: # C6C600; / * Колір посилань при наведенні і активному стані * /} .current-crumbs {color: # 000; / * Колір тексту для останньої крихти * /} Перевіряємо коректність відображення хлібних крихт на сторінках сайту і при необхідності вносимо зміни в стилі.
Інструмент перевірки структурованих даних Google
Тепер нам треба пройти перевірку на валідаторі мікророзмітки Google.
Переходимо по посиланню і нам відкриється сторінка, де в вводимо в поле URL будь-якої сторінки сайту. Я для експерименту, ввів URL статті про ЦОП Profit-Partner :
Тиснемо на кнопку «Перевірити» і милуємося результатом:
Завдяки мікродані, переданих роботу на мові RDF, наші хлібні крихти тепер з'являться в Сніпп результатів пошуку.
Хлібні крихти з мікроразмекой Schema.org
Час іде і все змінюється. Мікророзмітки, стандарту Schema.org все частіше використовується веб-майстрами для розмітки своїх проектів. Тому я вирішив запропонувати інший варіант функції mayak_breadcrumbs_new (), де я застосував бібліотеку http://data-vocabulary.org/Breadcrumb.
/ *** Функція хлібних крихт *** / function mayak_breadcrumbs_new () {$ mayak_home = 'Головна'; // текст посилання "Головна" $ mayak_last_crumb = 1; // 1 - показувати назву поточної статті / сторінки / рубрики, 0 - не показувати $ mayak_between = '& raquo; '; $ Mayak_from = '<span class = "current-crumbs">'; $ Mayak_to = '</ span>'; global $ post; $ Mayak_link_to_home = home_url ( '/'); $ Mayak_from_court = '<span itemscope itemtype = "http://data-vocabulary.org/Breadcrumb">'; $ Mayak_to_court = '</ span>'; $ Mayak_link_rdf = 'itemprop = "url"'; $ Mayak_path = $ mayak_from_court. '<A'. $ Mayak_link_rdf. 'Href = "% 1 $ s"> <span itemprop = "title">% 2 $ s </ span> </a>'. $ Mayak_to_court; $ Mayak_superior = $ descendant = $ post-> post_parent; $ Mayak_initial_page = get_option ( 'page_on_front'); if (is_home () || is_front_page ()) {echo '<div class = "block-crumbs" itemscope itemtype = "http://data-vocabulary.org/Breadcrumb"> <a'. $ Mayak_link_rdf. 'Href = "'. $ Mayak_link_to_home. '"> <Span itemprop = "title">'. $ Mayak_home. '</ Span> </a> </ div>'; } Else {echo '<div class = "block-crumbs" itemscope itemtype = "http://data-vocabulary.org/Breadcrumb">'; {Echo '<a'. $ Mayak_link_rdf. 'Href = "'. $ Mayak_link_to_home. '"> <Span itemprop = "title">'. $ Mayak_home. '</ Span> </a>'; if ($ mayak_initial_page == 0 || $ mayak_superior! = $ mayak_initial_page) echo $ mayak_between; } If (is_category ()) {$ this_category = get_category (get_query_var ( 'cat'), false); if ($ this_category-> parent! = 0) {$ category = get_category_parents ($ this_category-> parent, TRUE, ''. $ mayak_between. ''); if ($ mayak_last_crumb == 1) $ category = preg_replace ( "# ^ (. +) $ mayak_between $ #", "$ 1", $ category); $ Category = str_replace ( '<a', $ mayak_from_court. '<A'. $ Mayak_link_rdf, $ category); $ Category = str_replace ( '</a>', '</a>'. $ Mayak_to_court, $ category); $ Category = preg_replace ( '! <A (. *?)> (. *?) </a>! Si', '<a \\ 1> <span itemprop = "title"> \\ 2 </ span> </a> ', $ category); echo $ category; } If ($ mayak_last_crumb == 1) echo $ mayak_from. sprintf ( 'Категорія "'. single_cat_title ( '', false). '"'). $ Mayak_to; } Elseif (is_search ()) {echo $ mayak_from. sprintf ( 'Результати пошуку для "'. get_search_query (). '"'). $ mayak_to; } Elseif (is_day ()) {echo sprintf ($ mayak_path, get_year_link (get_the_time ( 'Y')), get_the_time ( 'Y')). $ Mayak_between; echo sprintf ($ mayak_path, get_month_link (get_the_time ( 'Y'), get_the_time ( 'm')), get_the_time ( 'F')). $ Mayak_between; echo $ mayak_from. get_the_time ( 'd'). $ Mayak_to; } Elseif (is_month ()) {echo sprintf ($ mayak_path, get_year_link (get_the_time ( 'Y')), get_the_time ( 'Y')). $ Mayak_between; echo $ mayak_from. get_the_time ( 'F'). $ Mayak_to; } Elseif (is_year ()) {echo $ mayak_from. get_the_time ( 'Y'). $ Mayak_to; } Elseif (is_single () &&! Is_attachment ()) {if (get_post_type ()! = 'Post') {$ post_specimen = get_post_type_object (get_post_type ()); $ Sleaze = $ post_specimen-> rewrite; printf ($ mayak_path, $ mayak_link_to_home. '/'. $ sleaze [ 'sleaze']. '/', $ post_specimen-> labels-> singular_name); if ($ mayak_last_crumb == 1) echo $ mayak_between. $ Mayak_from. get_the_title (). $ Mayak_to; } Else {$ cat = get_the_category (); $ Cat = $ cat [0]; $ Category = get_category_parents ($ cat, TRUE, ''. $ Mayak_between. ''); if ($ mayak_last_crumb == 0) $ category = preg_replace ( "# ^ (. +) $ mayak_between $ #", "$ 1", $ category); $ Category = str_replace ( '<a', $ mayak_from_court. '<A'. $ Mayak_link_rdf, $ category); $ Category = str_replace ( '</a>', '</a>'. $ Mayak_to_court, $ category); $ Category = preg_replace ( '! <A (. *?)> (. *?) </a>! Si', '<a \\ 1> <span itemprop = "title"> \\ 2 </ span> </a> ', $ category); echo $ category; if ($ mayak_last_crumb == 1) echo $ mayak_from. get_the_title (). $ Mayak_to; }} Elseif (! Is_single () &&! Is_page () && get_post_type ()! = 'Post' &&! Is_404 ()) {$ post_specimen = get_post_type_object (get_post_type ()); echo $ mayak_from. $ Post_specimen-> labels-> singular_name. $ Mayak_to; } Elseif (is_attachment ()) {$ superior = get_post ($ mayak_superior); $ Cat = get_the_category ($ superior-> ID); $ Cat = $ cat [0]; if ($ cat) {$ category = get_category_parents ($ cat, TRUE, ''. $ mayak_between. ''); $ Category = str_replace ( '<a', $ mayak_from_court. '<A'. $ Mayak_link_rdf, $ category); $ Category = str_replace ( '</a>', '</a>'. $ Mayak_to_court, $ category); $ Category = preg_replace ( '! <A (. *?)> (. *?) </a>! Si', '<a \\ 1> <span itemprop = "title"> \\ 2 </ span> </a> ', $ category); echo $ category; } Printf ($ mayak_path, get_permalink ($ superior), $ superior-> post_title); if ($ mayak_last_crumb == 1) echo $ mayak_between. $ Mayak_from. get_the_title (). $ Mayak_to; } Elseif (is_page () &&! $ Mayak_superior) {if ($ mayak_last_crumb == 1) echo $ mayak_from. get_the_title (). $ Mayak_to; } Elseif (is_page () && $ mayak_superior) {if ($ mayak_superior! = $ Mayak_initial_page) {$ breadcrumbs = array (); while ($ mayak_superior) {$ page = get_page ($ mayak_superior); if ($ mayak_superior! = $ mayak_initial_page) {$ breadcrumbs [] = sprintf ($ mayak_path, get_permalink ($ page-> ID), get_the_title ($ page-> ID)); } $ Mayak_superior = $ page-> post_parent; } $ Breadcrumbs = array_reverse ($ breadcrumbs); for ($ i = 0; $ i <count ($ breadcrumbs); $ i ++) {echo $ breadcrumbs [$ i]; if ($ i! = count ($ breadcrumbs) -1) echo $ mayak_between; }} If ($ mayak_last_crumb == 1) {if ($ descendant! = 0 && $ descendant! = $ Mayak_initial_page) echo $ mayak_between; echo $ mayak_from. get_the_title (). $ Mayak_to; }} Elseif (is_tag ()) {echo $ mayak_from. sprintf ( 'Записи з міткою "% s"', single_tag_title ( '', false)). $ Mayak_to; } Elseif (is_author ()) {global $ author; $ Userdata = get_userdata ($ author); echo $ mayak_from. sprintf ( 'Записи автора за% s', $ userdata-> display_name). $ Mayak_to; } Elseif (is_404 ()) {echo $ mayak_from. 'Помилка 404' . $ Mayak_to; } Elseif (has_post_format () &&! Is_singular ()) {echo get_post_format_string (get_post_format ()); } If (get_query_var ( 'paged')) {if (is_category () || is_day () || is_month () || is_year () || is_search () || is_tag () || is_author ()) echo '( '; echo' Сторінка '. get_query_var (' paged '); if (is_category () || is_day () || is_month () || is_year () || is_search () || is_tag () || is_author ()) echo ')'; } Echo '</ div>'; }} / *** Кінець функції хлібних крихт *** /До зустрічі!
З повагою, Віталій Кирилов
Статті по темі:
Мікророзмітки Schema.org. приклад використання
Мікророзмітки Schema.org, бібліотека Article
Php if (have_posts ()): while (have_posts ()): the_post (); ?
Php mayak_breadcrumbs_new (); ?