- Breadcrumbs або Хлібні крихти для WordPress без плагінів
- 301 редирект неправильних адрес виду http://site.ru/http://site.ru/post-name на правильні
- Фільтрація результатів пошуку в WordPress
- Робимо і додаємо свій метатег canonical для всіх сторінок блогу
- Додаємо в WordPress метатег meta robots з noindex, nofollow для сторінок з 404 помилкою
- Висновок постового через додаткове довільне поле в WordPress
- Фільтрація html коду (висновок html звичайним текстом) в коментарях WordPress
- Видалення nofollow для посилань в коментарях WordPress блогу
Опубліковано: 9 квітня 2012 / Оновлено: 2 березня 2019
Привіт друзі. Якщо пам'ятаєте, я якось в Твіттері обмовився, що мені постійно доводиться «забивати милиці» у движок WordPress, щоб домогтися правильної роботи того чи іншого компонента. Так ось цих милиць у мене накопичилося вже чимало, досить для того, щоб оформити їх в цілий пост.
Майже всі скрипти і функції, описані нижче, придумані і написані мною, і всі вони в даний момент використовуються на моєму блозі, так що, як то кажуть, все перевірено на собі.
Кожен для себе обов'язково знайде щось корисне в цьому пості.
Breadcrumbs або Хлібні крихти для WordPress без плагінів
Якщо ви пам'ятаєте, то я великий противник установки плагінів, які роблять те, що можна реалізувати і без них, при цьому витративши набагато менше ресурсів і зберігши швидкодію движка в цілому.
Ось і в питанні створення хлібних крихт я вирішив не вдаватися до плагінів, а вирішив вмикати мізки і написати функцію самостійно. Як ви зараз побачите, коду рівно на 10 рядків!
/ *** ХЛІБНІ КРИХТИ WordPress *** / function my_breadcrumbs () {if (is_home ()) {// якщо головна сторінка, то нічого не робимо} elseif (is_single ()) {// якщо сторінка поста, то виводимо хлібні крихти echo '<a title="На головну страніцу" href="http://alaev.info"> Оптимізація сайтів </a> »<a title =" Переглянути всі записи блогу "href =" https: // alaev. info / blog "> SEO Блог </a>» '; foreach ((get_the_category ()) as $ cat) {$ cat = $ cat -> cat_ID; echo (get_category_parents ($ cat, TRUE, ' »')); } // висновок категорії поста the_title (); // вивід заголовка поста}}/ *** ХЛІБНІ КРИХТИ WordPress *** / function my_breadcrumbs () {if (is_home ()) {// якщо головна сторінка, то нічого не робимо} elseif (is_single ()) {// якщо сторінка поста, то виводимо хлібні крихти echo '<a title="На головну страніцу" href="http://alaev.info"> Оптимізація сайтів </a> »<a title =" Переглянути всі записи блогу "href =" https: // alaev. info / blog "> SEO Блог </a>» '; foreach ((get_the_category ()) as $ cat) {$ cat = $ cat-> cat_ID; echo (get_category_parents ($ cat, TRUE, ' »')); } // висновок категорії поста the_title (); // вивід заголовка поста}}
Даний код необхідно вставити в початок (після <? Php) або в кінець (перед?>) Файлу functions.php вашої поточної теми оформлення.
Після цього необхідно додати код <? Php my_breadcrumbs (); ?> В файл single.php
Очищаємо кеш, якщо це необхідно, і бачимо хлібні крихти в постах на своєму блозі.
У коді функції все повинно бути зрозуміло, скрізь є позначки, вам залишається тільки прописати свої url'и і анкор до них.
Будьте уважні при використанні мультикатегорій, можливі неправильні варіанти формування крихт.
Приклад роботи даного коду ви можете спостерігати в даній статті над заголовком.
301 редирект неправильних адрес виду http://site.ru/http://site.ru/post-name на правильні
Зовсім недавно я виявив в панелі вебмастера Google в розділі «Діагностика сайту -> Помилки сканування» таку фігню: з'явилося кілька десятків битих урлов такого виду як зазначено в підзаголовку. Зрозуміло, при переході по ним видавалася 404 помилка. Навіщо і якого власне хрону на мене поставили такі зовнішні посилання мені не відомо, але факт є факт, довелося розбиратися.
Щоб виправити ситуацію я написав наступне умова, його необхідно вставити так само в файл functions.php:
/ *** милицях ДЛЯ ВИПРАВЛЕННЯ http://site.ru/http://site.ru/ *** / if (strpos ($ _SERVER [ 'REQUEST_URI'], 'http://alaev.info')! == false) {$ real_page_url = "http://alaev.info". str_replace ( "/http://alaev.info", "", $ _SERVER [ 'REQUEST_URI']); header ( "HTTP / 1.0 301 Moved Permanently"); header ( "Location: $ real_page_url"); die ( "Redirect"); }/ *** милицях ДЛЯ ВИПРАВЛЕННЯ http://site.ru/http://site.ru/ *** / if (strpos ($ _ SERVER [ 'REQUEST_URI'], 'http://alaev.info')! == false) {$ real_page_url = "http://alaev.info" .str_replace ( "/http://alaev.info", "", $ _SERVER [ 'REQUEST_URI']); header ( "HTTP / 1.0 301 Moved Permanently"); header ( "Location: $ real_page_url"); die ( "Redirect"); }
Тепер, якщо в запитуваній url'е міститиметься дублювання адреси хоста, це дублювання буде віддалятися і буде відбуватися 301 редирект на потрібну сторінку.
Щоб скористатися кодом вам необхідно замінити адресу хоста alaev.info на свій. Будьте уважні, не видаляйте і не додавайте ніякі слеші в код, інакше може трапитися біда.
Фільтрація результатів пошуку в WordPress
Ідею даного милиці я підглянув на якомусь блозі, на якому вже, зрозуміло, не пам'ятаю.
В чому полягає суть даної функції? Функція дозволяє обмежувати область пошуку, а якщо бути конкретніше, то в рядку $ query-> set ( 'post_type', 'post'); ми вказуємо тип запису, який виводити в результатах. Мені це знадобилося для того, щоб через пошук не знаходились статичні сторінки, а показувалися тільки пости блогу.
Це буде корисно тим, у кого на блозі багато різних статичних сторінок, які можуть не завжди співпадати за змістом і змістом з основною складовою блогу. У конкретно моєму випадку я не хотів, щоб у пошуку видавалися сторінки фото-портфоліо.
/ *** ФІЛЬТР ДЛЯ ПОШУКУ WordPress ТІЛЬКИ поста *** / function SearchFilter ($ query) {if ($ query -> is_search) {$ query -> set ( 'post_type', 'post'); // визначаємо тип записів, за якими потрібно шукати} return $ query; } Add_filter ( 'pre_get_posts', 'SearchFilter'); // фільтр буде вбудований в цикл і буде сортувати результат пошуку перед виведенням/ *** ФІЛЬТР ДЛЯ ПОШУКУ WordPress ТІЛЬКИ поста *** / function SearchFilter ($ query) {if ($ query-> is_search) {$ query-> set ( 'post_type', 'post'); // визначаємо тип записів, за якими потрібно шукати} return $ query; } Add_filter ( 'pre_get_posts', 'SearchFilter'); // фільтр буде вбудований в цикл і буде сортувати результат пошуку перед виведенням
Для перевірки ви можете цілеспрямовано пошукати що-небудь з розділу ФОТО і ви нічого не знайдете =)
Робимо і додаємо свій метатег canonical для всіх сторінок блогу
Ось з цієї фішкою була взагалі ціла історія. Пам'ятайте, коли Яндекс ввів у себе підтримку даного метатега? Так ось майже відразу після цього в панелі вебмастера у мене з'явилася категорія помилок «Документ не є канонічним» де відобразилися всі сторінки пагінацію. Я став розбиратися в чому справа, і виявилося так, що плагін WP-Pagenavi генерував мені неправильні урли сторінок, про те як я розібрався з цією проблемою я вже описував в пості про посторінкову навігацію в WordPress без плагінів . Але на цьому пригоди не закінчилися!
Якщо ви користуєтеся плагіном All In One SEO, а ви з імовірністю 95% їм точно користуєтеся, знаєте, що там є така настройка «Canonical URLs», при її включенні на всі сторінки буде додаватися горезвісний метатег rel = "canonical". Так ось виявилося, що AISOEP-плагін теж не полюбив деякі сторінки мого блогу і прописував адреси зі слешем на кінці, в той час як у мене все адреси без слеша. Ну і в підсумку стався нонсенс - при заході на сторінку зі слешем відбувається 301 редирект на сторінку без слеша , При цьому в канонікале прописаний адресу з слешем. І ось що робити роботом при індексації таких сторінок? Ось і я не знаю.
Довелося відключати в плагіні All In One SEO Pack настройку канонізації і писати свою функцію, яка б правильно працювала в ситуації, що склалася.
/ *** додає СВІЙ rel canonical *** / function my_rel_canonical () {if (! Is_404 ()) {// якщо не 404 помилка $ requested_url = (! Empty ($ _SERVER [ 'HTTPS']) && strtolower ($ _SERVER [ 'HTTPS']) == 'on')? 'Https: //': 'http: //'; $ Requested_url. = $ _SERVER [ 'HTTP_HOST']; $ Requested_url. = $ _SERVER [ 'REQUEST_URI']; $ Url_array = explode ( '?', $ Requested_url); $ Requested_url = $ url_array [0]; // відсікаємо все що після першого знака питання? $ Requested_url = rtrim ($ requested_url, '/'); // прибираємо кінцевий слеш, якщо є echo "". '<Link rel = "canonical" href = "'. $ Requested_url. '" />'. "\ N"; }} Add_action ( 'wp_head', 'my_rel_canonical', 3); // додаємо свій canonical в head/ *** додає СВІЙ rel canonical *** / function my_rel_canonical () {if (! Is_404 ()) {// якщо не 404 помилка $ requested_url = (! Empty ($ _ SERVER [ 'HTTPS']) && strtolower ($ _SERVER [ 'HTTPS']) == 'on')? 'Https: //': 'http: //'; $ Requested_url. = $ _SERVER [ 'HTTP_HOST']; $ Requested_url. = $ _SERVER [ 'REQUEST_URI']; $ Url_array = explode ( '?', $ Requested_url); $ Requested_url = $ url_array [0]; // відсікаємо все що після першого знака питання? $ Requested_url = rtrim ($ requested_url, '/'); // прибираємо кінцевий слеш, якщо є echo "". '<Link rel = "canonical" href = "'. $ Requested_url. '" />'."\n "; }} Add_action ( 'wp_head', 'my_rel_canonical', 3); // додаємо свій canonical в head
Код цієї функції треба додати в свій functions.php. Функція працює наступним чином: запитаний url розбирається на частини (протокол + хост + uri), потім з отриманого масиву викидається все, що йде після знака питання (якщо він є, звичайно знаком питання відокремлюють передається в url параметри), і в самому кінці йде перевірка на наявність завершального слеша, і якщо він є, то ми його видаляємо.
Якщо ж у вас адреси сторінок на блозі формуються так, що в кінці обов'язково присутній слеш, то просто видаліть з коду рядок:
$ Requested_url = rtrim ($ requested_url, '/'); // прибираємо кінцевий слеш, якщо є$ Requested_url = rtrim ($ requested_url, '/'); // прибираємо кінцевий слеш, якщо є
І тоді все буде працювати як треба!
До речі, це справа не підійде для НЕ ЧПУ урлов, так як в цьому випадку якраз все і передається за допомогою параметрів і для кожної сторінки rel canonical буде містити адресу головної сторінки. Щоб пристосувати функцію для НЕ ЧПУ адрес необхідно позбутися від цього рядка коду:
$ Url_array = explode ( '?', $ Requested_url); $ Requested_url = $ url_array [0]; // відсікаємо все, що після першого знака?$ Url_array = explode ( '?', $ Requested_url); $ Requested_url = $ url_array [0]; // відсікаємо все, що після першого знака?
Ось, тепер я врахував всі нюанси.
Додаємо в WordPress метатег meta robots з noindex, nofollow для сторінок з 404 помилкою
Не впевнений, наскільки стане в нагоді цей милицю вам, але у мене в панелі вебмастера Google поступово зникли всі 404 помилки після даної маніпуляції.
Код цієї функції гранично простий, дивіться самі:
/ *** додає noindex, nofollow ЯКЩО 404 *** / function my_404_noindex () {if (is_404 ()) {echo "". '<Meta name = "robots" content = "noindex, nofollow" />'. "\ N"; }} Add_action ( 'wp_head', 'my_404_noindex', 3); // додаємо свій noindex, nofollow в head/ *** додає noindex, nofollow ЯКЩО 404 *** / function my_404_noindex () {if (is_404 ()) {echo "". '<Meta name = "robots" content = "noindex, nofollow" />'. " \ n "; }} Add_action ( 'wp_head', 'my_404_noindex', 3); // додаємо свій noindex, nofollow в head
Як і всі попередні милиці, код функції треба додати в ваш файл functions.php. Що ж він робить? Найпростіше умова на перевірку - якщо видається 404 помилка, то виводимо метатег, а потім через стандартний фільтр add_action (); додаємо цей запис в <head>.
Все геніальне просто, чи не так! Сподіваюся, вам стане в нагоді.
Висновок постового через додаткове довільне поле в WordPress
Вирішив розповісти якомога витонченіше і зручно розміщувати постові або інші подібні посилання (можна і не тільки посилання, зрозуміло) в постах блогу. Зазвичай постової просто розміщується в тілі поста в самому кінці, але мені так було незручно, і я придумав, як можна виводити постової через додаткове поле в записі.
Для початку додамо в шаблон своєї теми в файл single.php наступний код:
<? Php $ checkpos = get_post_meta ($ post -> ID, 'postovoi', $ single = true); if ($ checkpos! == '') {echo $ checkpos; } Else {echo '<a href="https://alaev.info/reklama#blogger"> Тут може бути ваш постової </a>'; }?><? Php $ checkpos = get_post_meta ($ post-> ID, 'postovoi', $ single = true); if ($ checkpos! == '') {echo $ checkpos;} else {echo '<a href="https://alaev.info/reklama#blogger"> Тут може бути ваш постової </a>';} ?>
Розміщувати його необхідно, наприклад, після рядка <? Php the_content ( ''); ?> В такому випадку відразу після тексту поста буде виводитися потрібна інформація.
Після цього заходимо в редагування будь-якого посту або при додаванні нового прокручуємо сторінку до блоку під назвою «Довільні поля». Тиснемо «Додати нове» і вказуємо йому ім'я postovoi, а в полі «Значення» вставляємо потрібний текст або html код посилання, а потім тиснемо «Додати довільне поле».
Тепер в кінці запису у вас з'явиться ця посилання-постової. Особливість моєї функції ще в тому, що якщо це довільне поле не заповнено, то буде виводитися стандартна інформація, в даному випадку це буде посилання з анкором «Тут може бути ваш постової», яка буде вести на сторінку «Реклама». Ви самі зможете налаштувати, що у вас буде за замовчуванням показуватися, це не складно.
Мені здається це дуже зручно і прикольно. Скрипт можна пристосувати для виведення чого завгодно - хоч банера, хоч своїх реф-посилань або будь-який іншої корисної інформації.
Фільтрація html коду (висновок html звичайним текстом) в коментарях WordPress
Вас здолали спамери або вам не подобається, що коментатори постять ліві посилання на свої сайти в коментарях без вашого відома, а, може бути, вам просто не треба, щоб оброблявся html код в коментарях? Тоді читайте далі.
У файл functions.php вашої теми необхідно додати наступний код:
/ *** ФІЛЬТРАЦІЯ html В КОМЕНТАРЯХ WordPress *** / function plc_comment_post ($ incoming_comment) {$ incoming_comment [ 'comment_content'] = htmlspecialchars ($ incoming_comment [ 'comment_content']); $ Incoming_comment [ 'comment_content'] = str_replace ( " '",' & apos; ', $ incoming_comment [' comment_content ']); return ($ incoming_comment); } Function plc_comment_display ($ comment_to_display) {$ comment_to_display = str_replace ( '& apos;', " '", $ comment_to_display); return $ comment_to_display; } Add_filter ( 'preprocess_comment', 'plc_comment_post', '', 1); add_filter ( 'comment_text', 'plc_comment_display', '', 1); add_filter ( 'comment_text_rss', 'plc_comment_display', '', 1); add_filter ( 'comment_excerpt', 'plc_comment_display', '', 1);/ *** ФІЛЬТРАЦІЯ html В КОМЕНТАРЯХ WordPress *** / function plc_comment_post ($ incoming_comment) {$ incoming_comment [ 'comment_content'] = htmlspecialchars ($ incoming_comment [ 'comment_content']); $ Incoming_comment [ 'comment_content'] = str_replace ( " '",' & apos; ', $ incoming_comment [' comment_content ']); return ($ incoming_comment); } Function plc_comment_display ($ comment_to_display) {$ comment_to_display = str_replace ( '& apos;', " '", $ comment_to_display); return $ comment_to_display; } Add_filter ( 'preprocess_comment', 'plc_comment_post', '', 1); add_filter ( 'comment_text', 'plc_comment_display', '', 1); add_filter ( 'comment_text_rss', 'plc_comment_display', '', 1); add_filter ( 'comment_excerpt', 'plc_comment_display', '', 1);
Суть всіх цих фільтрів така, що будь-яка текстова інформація, додана в коментар, чи не буде оброблятися движком і відобразиться точно так, як її вбив коментатор, тобто ніяка розмітка не застосовуватиметься. Потім ви самі зможете оформити текст коментаря як вам треба з адмінки.
Іноді такий жорсткий метод просто необхідний.
Видалення nofollow для посилань в коментарях WordPress блогу
Даний милицю варто використовувати в поєднанні з попереднім методом фільтрафіі html. В такому випадку ви самостійно зможете регулювати простановку посилань, а раз ви вирішили залишити якісь посилання, значить вони вам потрібні, і значить немає сенсу забороняти перехід по ним для роботів.
За замовчуванням WordPress ставити rel = "nofollow" для всіх посилань в коментарях, і нам треба переконати його!
У свій файл functions.php треба додати наступний фільтр:
/ *** ВИДАЛЕННЯ nofollow В КОМЕНТАРЯХ WordPress *** / function remove_nofollow ($ string) {$ string = str_ireplace ( 'rel = "nofollow"', '', $ string); return $ string; } Add_filter ( 'comment_text', 'remove_nofollow'); // видаляємо nofollow для текстів коментарів/ *** ВИДАЛЕННЯ nofollow В КОМЕНТАРЯХ WordPress *** / function remove_nofollow ($ string) {$ string = str_ireplace ( 'rel = "nofollow"', '', $ string); return $ string; } Add_filter ( 'comment_text', 'remove_nofollow'); // видаляємо nofollow для текстів коментарів
Все готово, відтепер ніяких nofollow в посиланнях коментарів!
На сьогодні все, дорогі друзі. Я поділився з вами найцікавішими напрацюваннями для мого блогу за час його ведення, і я дуже сподіваюся, що ці дрібні фішки знадобляться і вам.
Можете задавати питання, ділитися своїми оригінальними розробками, пропонувати ідеї та обговорювати!
PS Якщо вас цікавить якесь питання на тему «а як зробити ...?» - прошу вас залишати запити в коментарях. У наступному випуску «милиць» я напишу рішення вашої проблеми.
З повагою, Олександр Алаев
Опубліковано: 9 квітня 2012
Перед?
Після цього необхідно додати код <?
Php my_breadcrumbs (); ?
В чому полягає суть даної функції?
Пам'ятайте, коли Яндекс ввів у себе підтримку даного метатега?
І ось що робити роботом при індексації таких сторінок?
SERVER [ 'REQUEST_URI']; $ Url_array = explode ( '?', $ Requested_url); $ Requested_url = $ url_array [0]; // відсікаємо все що після першого знака питання?
SERVER [ 'REQUEST_URI']; $ Url_array = explode ( '?', $ Requested_url); $ Requested_url = $ url_array [0]; // відсікаємо все що після першого знака питання?