Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

Забиваємо милиці - Збірник корисних функцій і скриптів для WordPress

  1. Breadcrumbs або Хлібні крихти для WordPress без плагінів
  2. 301 редирект неправильних адрес виду http://site.ru/http://site.ru/post-name на правильні
  3. Фільтрація результатів пошуку в WordPress
  4. Робимо і додаємо свій метатег canonical для всіх сторінок блогу
  5. Додаємо в WordPress метатег meta robots з noindex, nofollow для сторінок з 404 помилкою
  6. Висновок постового через додаткове довільне поле в WordPress
  7. Фільтрація html коду (висновок html звичайним текстом) в коментарях WordPress
  8. Видалення 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]; // відсікаємо все що після першого знака питання?

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.