WordPress — кастумізація через function.php

Одна з причин популярності вордпресу полягає в гнучкій можливості налаштування. Далі мова піде про хуки і файл function.php в Вашій темі.

В одному матеріалі я описував ієрархію шаблонів і можливість переоприділяти базове форматування в себе в темі. Це один з найефективніших та очевидних варіантів. Поза іншими перевагами, він дозволяє вносити складне форматування та підв’язку в файли власної теми.

Проте, якщо потрібно внести мінімальні зміни, тимчасово відключити деякі елементи, або ж внести корекції у встановленні плагіни, то ефективнішим видається внесення хуків (хаків, сніпетів) — невеликих конструкцій, які коректують налаштування або шаблон WordPress.

Як Ви вже могли здогадатись, вносяться хуки в файл function.php. Детальніше про нього ми ще проговоримо в подальших публікаціях, а на разі подаю для прикладу кілька хуків, які Ви можете активувати, внісши до function.php ці конструкції:

Виключаємо вивід повідомлення про помилку при неправильному вводі паролю при авторизації.

add_filter('login_errors',create_function('$a', "return null;"));

Видаляємо вивід версії вашого дистрибутиву WordPress.

function remove_wp_version(){ 
return ''; 
} 
add_filter('the_generator', 'remove_wp_version');

Вставляємо додаткове наповнення (напр. підпис) вкінці кожної публікації. Зауважте, що завдяки умові !is_home() додатковий контент не буде виводитись на головній.

function insertFootNote($content) {
 if(!is_home()) {
 $content.= "<p>з найліпшими побажаннями, слідкуйте за нами в соцмережах.</p>";
 }
 return $content;
}
add_filter ('the_content', 'insertFootNote');

Додаємо нові опційні поля в користувацький профіль.

function my_user_contactmethods($user_contactmethods){

  $user_contactmethods['twitter'] = 'Twitter Username';
  $user_contactmethods['facebook'] = 'Facebook Username'; 

  return $user_contactmethods;
} 

add_filter('user_contactmethods', 'my_user_contactmethods');

Змушуємо всі лінки відкриватись в новому вікні

function autoblank($text) {
$return = str_replace('<a', '<a target="_blank"', $text);
return $return;
}
add_filter('the_content', 'autoblank');
Захист WordPress від шкідливих url-запитів.
if (strpos($_SERVER['REQUEST_URI'], "eval(") ||	strpos($_SERVER['REQUEST_URI'], "CONCAT") || strpos($_SERVER['REQUEST_URI'], "UNION+SELECT") ||	strpos($_SERVER['REQUEST_URI'], "base64")) {
	@header("HTTP/1.1 400 Bad Request");
	@header("Status: 400 Bad Request");
	@header("Connection: Close");
	@exit;
}

26 коментарів для “WordPress — кастумізація через function.php”

  1. А для чого це потрібно:
    “Видаляємо вивід версії вашого дистрибутиву WordPress.” – за допомогою прописаної внизу функції?
    І це для чого нам потрібно, чим ця функція корисна на практиці:
    “Захист WordPress від шкідливих url-запитів.”

    1. Для чого видаляти версію Вордпресу.

      Часто, коли виробники оновлюють проект, вони вказують всі косяки попередньої версії, через які можна зламати сайт…

      Тобто, якщо Ви поїхали у відпустку, в цей час випустили нову версію, а Ви не змогли її оновити, то потенційно, зловмисникам лекше підібрати варіант злому… Не виводячи версію, Ви не спрощуєте їм життя 🙂

      Аналогічна місія і в захисту від шкідливих запитів — код блокує чималу частину спроб злому.

      1. Ясно, для захисту сайту потрібно. Якраз, буквально, тиждень тому прийшло мені та дівчатам, думаю, теж повідомлення на пошту про оновлення версії Вордпресу до 4.5.3(не впевнана, що саме до такої, але оновлення).

    1. Ну, я б не сказав, що аж так нічого не працює 🙂

      Зайдіть в адмінку, відкрийте список користувачів та, зайшовши на одного з юзерів, промотайте за поле поштової скриньки.

      Ви побачите, що як мінімум один з хаків пішов нормально і Ваші користувачі мають додаткові створені поля.

    2. Щодо інших хаків, то тут не все так однозначно…

      Наприклад цей хак виводиться при наявності динамічних матеріалів, а у Вас вони відсутні…:
      Вставляємо додаткове наповнення (напр. підпис) вкінці кожної публікації. Зауважте, що завдяки умові !is_home() додатковий контент не буде виводитись на головній.

      Щоб вирішити це потрібно закінчити деякі попередні маніпуляції. Вам допомогти з цим?

    1. давайте спробуємо запустити додаткове наповнення після публікацій. Потрібний хак в function.php у Вас вже є, тепер спробуємо вивести самі публікації 🙂

      для початку зайдіть в адмінку: /wp-admin/edit.php та додайте 5-9 новин. Бажано з фото та розділенням на коротку та повну історію.

    2. Після створення тестового контенту слід подбати про його вивід. Для цього нам потрібен буде робочий код. Як варіант заходимо на урок створення теми WordPress, де є розписані сегменти, або можна завантажити увесь архів.

      Якщо хочеться результат уже й відразу, то вставляємо ось цей шмат коду. Конструкція забезпечує вивід даних.

      →') ); ?>

      Проте рекомендую полистати матеріал, щоб орієнтуватись, звідки ростуть ноги конкретної функції. + відпишіться по результатах, які будуть питання.

  2. Я створила через ДіректАдмін файл – function.php – додала відповідні функції, тобто прописала, – і нічого не відображається. До того ж видно, що цей файл якийсь некоректний чи неправильний, коли його вибираєш на Вордпресі.
    Тоді скопіювала файл functions.php – все прописала і прописані функції коректно відобразились.
    В чому тут проблема?

    1. скоріш за все Ви могли помилитись в назві файлу.

      Я знаю, що створений через діректадмін function.php може мати проблеми з кодуванням, але він в будь-якому разі мав би відображатись в темі.

      Отже, або Ви могли помилитись в назві, або внесли його не в ту директорію (чи зайшли в редагування не тієї теми).

  3. Я через адміністративну панель додала записи та сторінки. Вміст сторінок відображається внизу на тій же сторінці. Як зробити, щоб вони відкривались в ному вікні? Я пододавала усі коди, видаляла, тепер сайт не працює (помилка 500 – Сторінка хосту qtana.intech.lviv.ua не працює Хост qtana.intech.lviv.ua зараз не може обробити цей запит.HTTP ERROR 500). Я, мабуть, якусь тему пропустила…Як меню розмістити в горизонтальну лінію?

        1. давайте для початку виділимо основні нестиковки:
          – в нас є сітка новин, проте вона не має нічого спільного з наповненням сайту
          – в нас виводиться один матеріал, проте повинно виводитись решта публікацій, що є в базі даних

        2. Почати варто з другого пункту — аби виводились усі публікації

          Зауважте виділений блок. Початок означає цикл, який перебирає усі матеріали. Код означає закінчення циклу.

          Видно, що Ви робили за уроком, проте зверніть увагу, що там я писав, що наступні шматки коду слід вставляти всередину цієї конструкції.

          Як це поправити:
          – виріжте (не скопіюйте, а саме виріжте) частку
          – вставте її вкінці сторінки після

          Ця маніпуляція зациклить вивід матеріалів і замість одного Ви матимете усю збірку

            1. тепер нам слід надати статтям адекватного вигляду, відштовхуючись від сітки, що ми маєм вгорі.

              Зверніть увагу на код між циклом
              та . Елементи цього коду відповідають за:
              1) вивід усіх статей на головній сторінці;
              2) вивід детального вигляду статті, коли користувач клікає на назву.

              В цих двох частинах можна виділити назву. Виводиться з допомогою змінної .

            2. шматок коду, що відповідає за вивід короткого опису в списку матеріалів та повної статті може різнитись 🙂

              Пропоную Вам методом виключення (вирізаючи потрібні частини і дивлячись на зміни) визначити які це частини.

              Після того як Ви розберетесь з функціоналом — перейдемо до “загортання” функціоналу в верстку.

Залишити відповідь