PHP код у WordPress - найкращі практики. Корисні вставки (фрагменти) коду для WordPress Приклади написання коду в wp

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

Головна складність у редагуванні коду полягає в тому, що зміни, які ви вносите, на жаль, не зберігаються надовго, і найімовірніше анулюються під час наступного оновлення. Якщо рішення ви бачите в тому, щоб опинитися від оновлень – можу вас відмовити від цього небезпечного неблагородного рішення, оскільки в оновленнях містяться важливі зміниу частині безпеки та усунення помилок, а найчастіше ще й з'являються нові функції.

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

Застереження!

На просторах інтернету ви часто можете зустріти поради, в яких пропонують внести зміни до файлу functions.php- Якщо є будь-яка можливість обійтися без цього - краще не чіпати цей файл. У наведених нижче способах ви побачите спосіб, як це реалізувати. І в будь-якому випадку – потрібно створити дочірню тему та не чіпати батьківську.

Додаючи префікси до функції, завжди застосовуйте кастомний код у вигляді: _ prefix(До назви функції, що змінюється). Це явище убереже вас від конфліктів з іншими функціями теми або плагіна.

Отже, як додати код на WP сайт?

1) Кастомний плагін

Так ви можете вставити кодові сніпети, і вони не будуть видалені при оновленні, а також надалі зможете їх редагувати, активувати або навпаки - деактивувати по необхідності.

Зробити це просто: спочатку необхідно створити каталог для вашого плагіна, і назвати його відповідним чином, наприклад moy-plugin (використовуємо тільки тире, а не нижній сліш)

Далі створюємо головний файл плагіна. Як ви розумієте, він повинен включати назву, опис та основну інформацію, а також код, який допоможе убезпечити плагін від зловмисників. І називаємо цей файл, наприклад moy-plugin.php. Розширення.php покаже WP якою мовою створено даний файл.

Створити файл описаним вище способом можна у будь-якому текстовому редакторі, наприклад в NotePad, який вже дбайливо встановлений в операційній системі Windows(TextEdit в Mac). Редактором же Microsoft Wordкраще не користуватися, оскільки він форматує текст, а нам це не потрібно в даній ситуації.

Отже, ось код, який потрібно додати:

І нижче за цей код вносите свої зміни, яких вимагає ваша творча душа. Додавати PHP-теги, що закриваються, в кінці не потрібно. При цьому назва, опис та URL відображаються у вашій адмінці. І, звичайно, ви можете замінити своєю власною інформацією інформацію «ClubWP»

Після чого залишилося лише запакувати створене у zip-архів та відправити на ftp вашого сайту. У майбутньому так ви зможете внести будь-які зміни вашого плагіна.

Цим не складним способом ви створите простий плагін для ваших потреб.

2) Плагін Code Snippets

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

Після встановлення плагіна, в адмінці з'явиться нове вікно Snippets, в якому, відповідно, ви зможете внести нові сніпети. Для яких можна внести код та інформацію про його призначення.

Таким чином, вам доступно: включати або відключати кастомний код у вигляді плагінів. Дуже зручно та практично, т.к. іноді можливі конфлікти з темами та плагінами, і ви зможете це легко зрозуміти та відключити створений код.

3) Редагування Functions.php дочірньої теми

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

Для використання цього методу, пропоную мій шаблон functions.phpдочірньої теми. Розпакуйте та редагуйте файл style.css(назва шаблону та імпорт URL)

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

Одного разу Ви вирішили створити свій сайт або блог, а для системи управління Ви вибрали WordPress ... Минув час ваш сайт стає все більш і більш читаним і тут, ви зрозуміли, що для ще більшої популярності необхідно додати трохи функціоналу до сайту або просто автоматизувати яке- то дію.

Ви йдете на склад плагінів для wordpress і виявляєте, що необхідного плагіну для Вас немає. Що ж робити? Як бути? Якщо ви хоча б трохи знайомі з азами програмування на php, верстці, то Вам не важко. Самому написати плагін для WordPress.

А тепер вирушимо на «кухню» для виготовлення нашого плагіна.

P.s. Якщо знань у php та верстці нема… не засмучуйтесь, попросіть будь-кого написати Вам потрібний функціонал 🙂

Перш ніж почати писати плагін необхідно звернутися до документації WordPress, де описані основні принципи написання плагінів та деякі приклади коду.

Я не дублюватиму цю інформацію, а відразу перейду безпосередньо до написання коду.

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

Перше, що ми зробимо, це придумаємо унікальну назву нашому плагіну - AdvUserReviews«.

Далі створимо в директорії Вашого сайту /wp-content/plugins/ нову директорію advuserreviews. І в ній створимо файл advuserreviews.php. Це буде основний файл, який відповідатиме за загальну ініціалізацію. (Використовуйте кодування для файлів UTF-8).

На самому початку файлу необхідно вказати основну інформацію про плагін

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

Наш новий плагін ми писатимемо в стилі ООП і вся обробка даних буде в одному файлі. Створимо основний каркас файлу.

// Stop direct call if(preg_match("#" . basename(__FILE__) . "#", $_SERVER["PHP_SELF"])) ( die("You are not allowed to call this page directly."); ) if (!class_exists("AdvUserReviews")) ( class AdvUserReviews ( // Зберігання внутрішніх даних public $data = array(); // Конструктор об'єкта // Ініціалізація основних змінних function AdvUserReviews() ( ) ) ) global $rprice; $rprice = New AdvUserReviews();

Тепер конструктор об'єкта доповнимо наступним кодом:

Function AdvUserReviews() ( global $wpdb; // Оголошуємо константу ініціалізації нашого плагіна DEFINE("AdvUserReviews", true); // Назва файлу нашого плагіна $this->plugin_name = plugin_basename(__FILE__); // URL адреса для нашого плагіна this->plugin_url = trailingslashit(WP_PLUGIN_URL."/".dirname(plugin_basename(__FILE__))); // Таблиця для зберігання наших відгуків // обов'язково має бути глобально оголошена пермінна $wpdb $this->tbl_adv_reviews = $ "adv_reviews"; // Функція яка виконується при активації плагіна register_activation_hook($this->plugin_name, array(&$this, "activate")); // Функція яка виконується при деактивації плагіна register_deactivation_hook($this->array (&$this, "deactivate")); // Функція яка виконується видаленні плагіна register_uninstall_hook($this->plugin_name, array(&$this, "uninstall")); )

У конструкторі об'єкта ми використовуємо 3 «хуки» або «зачіпки» (що це?): register_activation_hook, register_deactivation_hookі register_uninstall_hook- це функції, що виконуються при активації, деактивації плагіна та його видалення відповідно.

Тепер безпосередньо реалізуємо ці функції.

/** * Активація плагіна */ function activate() ( global $wpdb; require_once(ABSPATH . "wp-admin/upgrade-functions.php"); $table = $this->tbl_adv_reviews; // Визначення версії mysql if ( version_compare(mysql_get_server_info(), "4.1.0", ">=")) ( if (! empty($wpdb->charset)) $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; if (! empty( $wpdb->collate)) $charset_collate .= " COLLATE $wpdb->collate"; ) // Структура нашої таблиці для відгуків $sql_table_adv_reviews = " CREATE TABLE `".$wpdb->prefix."adv_reviews` (`ID` INT(10) UNSIGNED NULL AUTO_INCREMENT, `review_title` VARCHAR(255) NOT NULL DEFAULT "0", `review_text` TEXT NOT NULL, `review_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `0 VARCHAR(200) NULL, PRIMARY KEY (`ID`))".$charset_collate.";"; // Перевірка на існування таблиці if ($wpdb->get_var("show tables like "".$table.""" ) != $table) ( dbDelta($sql_table_adv_reviews); ) ) /** * Деакт івація плагіна */ function deactivate() ( return true; ) /** * Видалення плагіна */ function uninstall() ( global $wpdb; $wpdb->query("DROP TABLE IF EXISTS ($wpdb->prefix)adv_reviews"); )

Змінна $wpdbвідповідає за запити до бази даних. Функція dbDeltaаналізує поточну структуру таблиці, порівнює ee з бажаною структурою таблиці, або додає або змінює таблицю в міру необхідності.

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

Основна структура нового плагіну готова. Тепер необхідно розпочати написання функціональної частини. Для цього до конструктора класу нам необхідно додати наступні рядки коду:

// Якщо ми в адм. інтерфейс if (is_admin()) ( // Додаємо стилі та скрипти add_action("wp_print_scripts", array(&$this, "admin_load_scripts")); add_action("wp_print_styles", array(&$this, "admin_load_styles") // Додаємо меню для плагіна add_action("admin_menu", array(&$this, "admin_generate_menu")); ) else ( // Додаємо стилі та скрипти add_action("wp_print_scripts", array(&$this, "site_load_scripts") ; add_action("wp_print_styles", array(&$this, "site_load_styles")); add_shortcode("show_reviews", array (&$this, "site_show_reviews")); )

Розберемо докладніше цю ділянку коду. Почнемо з панелі адміністрування.
Функція « is_admin» перевіряє в якому режимі зараз ми працюємо - на сайті або панелі управління.
Далі використовується кілька хуків, для функцій:

  • wp_print_scripts- Додаємо необхідні javascript файли
  • wp_print_styles- Додаємо необхідні стилі
  • admin_menu- Додаємо нове меню в панелі керування

Кожному хуку відповідає реалізований метод у нашому класі. У якому виконуються необхідні операції.
Розглянемо код для підключення стилів та скриптів

/** * Завантаження необхідних скриптів для сторінки управління * в панелі адміністрування */ function admin_load_scripts() ( // Реєструємо скрипти wp_register_script("advReviewsAdminJs", $this->plugin_url . "js/admin-scripts.js"); w "jquery", $this->plugin_url . "js/jquery-1.4.2.min.js");// Додаємо скрипти на сторінку wp_enqueue_script("advReviewsAdminJs"); Завантаження необхідних стилів для сторінки управління * в панелі адміністрування */ function admin_load_styles() ( // Реєструємо стилі wp_register_style("advReviewsAdminCss", $this->plugin_url . "css/admin-style.css")/u "advReviewsAdminCss"); )

Тут застосовуються такі функції.

Кожна дія залежить від переданого параметра action, відповідно edit -редагування відгуку, submit - збереження відредагованого відгуку і delete - видалення відгуку.

Обмін даними зі сторінками відображення відбувається через властивість об'єкта data. Вихідний код цих сторінок буде викладено в архіві з цим модулем наприкінці статті. Тут я їх не вставлятиму, так як топік вже виявився досить великим.

На цьому з панеллю адміністрування закінчуємо і переходить до відображення та додавання відгуків з боку користувачів.

Щоб вказати wordpress, коли викликати наш плагін, необхідно зареєструвати «shortcode», що було зроблено в конструкторі нашого класу. Докладніше про це.

Add_shortcode("show_reviews", array (&$this, "site_show_reviews"));

Тепер на будь-якій сторінці сайту можна розмістити такий код і це змусить виконати вказану нами функцію (передається другим параметром). Нижче наведено вихідний код цієї функції.

/** * Список відгуків на сайті */ public function site_show_reviews($atts, $content=null) ( global $wpdb; if (isset($_POST["action"]) && $_POST["action"] == " add-review") ( $this->add_user_review(); ) // Вибираємо всі відгуки з Бази Даних $this->data["reviews"] = $wpdb->get_results("SELECT * FROM `" . $this- >tbl_adv_reviews . "`", ARRAY_A); ## Включаємо буферизацію виводу ob_start (); include_once("site_reviews.php"); ## Отримуємо дані $output = ob_get_contents (); ## Відключаємо буферизацію ob_end_clean (); ; ) private function add_user_review() ( global $wpdb; $inputData = array("review_title" => strip_tags($_POST["review_title"]), "review_text" => strip_tags($_POST["review_text"]), " review_user_name" => strip_tags($_POST["review_user_name"]), "review_user_email" => strip_tags($_POST["review_user_email"]),), // Додаємо новий відгук на сайт $wpdb->insert($this-> tbl_adv_reviews, $inputData);

У принципі тут нічого складного немає - робиться SQL запит на вибірку даних, якщо переданий параметр «action», то спочатку додається новий відгук. Але варто звернути увагу на буферизацію виводу. Вона необхідна для того, щоб отримати дані сторінки, що вставляється.

От і все. Тепер можна побачити, що в нас вийшло. А скачати плагін та вихідні кодиможна ось.

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

Форма на сайті:

Панель управління плагіном:

Редагування відгуку:

Можливо також вам буде цікаво:


Читабельність коду – це дуже хвора тема, і їй потрібно приділяти належну увагу. У цій статті ви дізнаєтесь про 16 прийомів, які допоможуть вам просунутися у цій темі.

1. Коментарі та Документація

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

Ось приклад:

Ось ще приклад виклику власного методу:

У цьому прикладі стиль коментування заснований на PHPDoc, а IDE, якою я користуюся, - Aptana.

2. Відступи

Я вважаю, що ви вже знаєте про важливість відступів у вашому коді. Загалом існує кілька стилів форматування коду.

Function foo() ( if ($maybe) ( do_it_now(); again(); ) else ( abort_mission(); ) finalize(); )

Function foo() ( if ($maybe) ( do_it_now(); again(); ) else ( abort_mission(); ) finalize(); )

Function foo() ( if ($maybe) ( do_it_now(); again(); ) else ( abort_mission(); ) finalize(); )

Особисто я найчастіше використовую стиль номер #2, але іноді переходжу і на #1. Але це все, звичайно ж, справа смаку. Швидше за все не існує найкращого стилю, який підійшов би абсолютно всім. Цим правилам, насамперед, слід дотримуватися тих, хто працює в команді або бере участь у написанні відкритих проектів.

Також існують стилі, які поєднують деякі характеристики. Наприклад, стандарти написання коду PEAR , де фігурна дужка "(" в умовних операторах залишається на тому ж рядку, а в функціях переноситься).

Стиль PEAR:

Function foo() ( // на новому рядку if ($maybe) ( // на тому ж рядку do_it_now(); again(); ) else ( abort_mission(); ) finalize(); )

Також слід зазначити, що в цьому стилі замість табів використовуються 4 пробіли.

Ви зможете дізнатися більше про різні стилі.

3. Уникайте зайвих коментарів

Так, коментування коду – це добре; Але тут не треба переборщувати. Ось приклад:

// отримуємо код країни $country_code = get_country_code($_SERVER["REMOTE_ADDR"]); // якщо країна US if ($country_code == "US") ( // відобразити форму echo form_input_state(); )

Якщо робота коду очевидна, то, швидше за все, не слід писати зайві коментарі.

Якщо вже немає, то можна їх трохи скоротити:

// Відобразити форму, якщо країна US $country_code = get_country_code($_SERVER["REMOTE_ADDR"]); if ($country_code == "US") ( echo form_input_state(); )

4. Групування коду

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

Ось простий приклад:

// Отримати список форумів $forums = array(); $r = mysql_query("SELECT id, name, description FROM forums"); while ($d = mysql_fetch_assoc($r)) ( $forums = $d; ) // завантажити шаблон load_template("header"); load_template("forum_list",$forums); load_template("footer");

Якщо ви додасте коментар перед початком кожного блоку, це ще більше покращить читабельність вашого коду.

5. Схема іменування

Іноді навіть у мові PHP можна визначити протиріччя іменування функций. І ось численні приклади:

  • strpos() проти str_split()
  • imagetypes() проти image_type_to_extension()

Існує кілька популярних стилів:

  • camelCase: перша літера кожного нового слова заголовна.
  • underscores: Підкреслення між словами: mysql_real_escape_string().

Якщо змішувати ці техніки, то рано чи пізно можна потрапити у незручну ситуацію. Якщо ви працюєте над проектом, в якому застосовується одна з цих технік, то вам треба наслідувати їх приклад. Ще може залежати від мови програмування. Наприклад, більшість Java розробників використовують camelCase а PHP розробники віддають перевагу underscores.

Але й тут не обійшлося без гібриду. Деякі розробники використовують підкреслення в іменуванні класів і методів (поза класами), а в інших випадках використовують camelCase:

Class Foo_Bar ( public function someDummyMethod() ( ) ) function procedural_function_name() ( )

Ще раз скажу, що найкращого стилю не буває. Просто потрібно чогось дотримуватись.

6. Принцип DRY

DRY (Don't Repeat Yourself) – не повторюйся. Також відомо як DIE: Дублювання - це зло.

Головне завдання будь-якої системи, будь то веб-додаток або щось ще, - автоматизувати завдання, що повторюються. Цього принципу слід слідувати завжди і скрізь, особливо якщо ти розробник. Один і той же шматок коду не повинен повторюватися знову і знову.

Наприклад, більшість веб-додатків складається з однієї і більше сторінок. Зрозуміло, що на цих сторінках будуть присутні однакові елементи. Заголовок, футер – найяскравіші приклади. Ви здивуєтеся, але багато людей все ще дублює ці елементи на кожній сторінці.

$this->load->view("includes/header"); $this->load->view($main_content); $this->load->view("includes/footer");

7. Уникайте глибокої вкладеності

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

Function do_stuff() ( // ... if (is_writable($folder)) ( if ($fp = fopen($file_path,"w"))) ( if ($stuff = get_some_stuff()) ( if (fwrite($) fp,$stuff)) ( // ... ) else ( return false; ) ) else ( return false; ) ) else ( return false; ) ) else ( return false; ) )

Для того, щоб виправити ситуацію, вам слід переглянути принцип роботи вашого коду та оптимізувати його:

Function do_stuff() ( // ... if (!is_writable($folder)) ( return false; ) if (!$fp = fopen($file_path,"w")) ( return false; ) if (!$stuff = get_some_stuff()) ( return false; ) if (fwrite($fp,$stuff)) ( // ... ) else ( return false; ) )

8. Ліміт довжини рядка

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

Подібну техніку можна застосувати і до нашого коду:

// погано $my_email->set_from(" [email protected]")->add_to(" [email protected]")->set_subject("Methods Chained")->set_body("Some long message")->send(); // добре $my_email ->set_from(" [email protected]") ->add_to(" [email protected]") ->set_subject("Methods Chained") ->set_body("Some long message") ->send(); (users.id, user_posts.user_id) WHERE post_id = "123""; // погано $query = "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHE post_id="123"";

Більшість розробників дотримуються ліміту 80 і 120 символів.

9. Організація Файлів та Папок

Технічно ви можете помістити весь код вашої програми в один файл:) Але що ви робитимете, коли треба буде щось змінити або додати.

Пам'ятаю свої перші проекти, де я приєднував файли. Проте організація у мене сильно шкутильгала. Я створював папку “inc”, у якій розташовував кілька файлів: db.php та functions.php. У процесі написання програми ця папка пухла і пухла і зрештою було важко зрозуміти, що де.

Щоб вирішити цю проблему краще користуватися різноманітними фреймворками або хоча б дотримуватися їх структури. Ось так виглядає проект на CodeIgniter:

10. Назви змінних

Взагалі, імена змінних повинні бути повністю осмисленими - це в ідеальному випадку. Для тимчасових змінних можна зробити виняток.

Давайте розглянемо кілька прикладів:

// $i для циклів for ($i = 0; $i< 100; $i++) { // $j для вложенных циклов for ($j = 0; $j < 100; $j++) { } } // $ret для возвращаемых переменных function foo() { $ret["bar"] = get_bar(); $ret["stuff"] = get_stuff(); return $ret; } // $k и $v для foreach foreach ($some_array as $k =>$v) ( ) // $q, $r і $d для mysql $q = "SELECT * FROM table"; $ r = mysql_query ($ q); while ($d = mysql_fetch_assocr($r)) ( ) // $fp для роботи з файлами $fp = fopen("file.txt","w");

11 - Пишіть ключові слова в SQL великими літерами

Більшість веб-додатків взаємодіють з базами даних. Якщо ви самі пишіть SQL запити, їх теж потрібно оформляти відповідним чином... Тут нічого складного немає. Просто пишіть ключові слова великими літерами.

12. Розділяйте код та дані

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

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

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

Популярні PHP Фреймворки:

Системи Шаблонів:

Популярні CMS

13. Спеціальний синтаксис для шаблонів

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

А ось і приклад:

Hello, username; ?>
|

My Message Board

title; ?>

Forums as $forum): ?>

id, $forum->title) ?> (Threads-> count (); ?> threads)

description; ?>

Така техніка дозволить вам уникнути зайвих дужок. Також такий код успішно вписується в HTML контекст.

14. Процедуральний та об'єктно орієнтований підходи

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

Об'єкти чудово підходять для представлення даних. Приклад:

Class User ( public $username; public $first_name; public $last_name; public $email; public function __construct() ( // ... ) public function create() ( // ... ) public function save() ( / / ... ) public function delete() ( // ... ) )

Процедуральні методи мають свою специфічну користь.

Function capitalize($string) ( $ret = strtoupper($string); $ret .= strtolower(substr($string,1)); return $ret; )

15. Читайте Open Source Код

Зазвичай, проекти Open Source пишуться великою кількістю розробників. З цього погляду вивчення написаного коду в подібних проектах може допомогти вам набратися досвіду. Тож не шкодуйте на це часу.

16. Рефакторинг

Рефакторинг – це зміна коду без втрати функціональності. Його також можна застосовувати для покращення читабельності. Тут немає місця виправленню багів або додавання функціональності. Ви просто трохи змінюєте структуру коду.

Сподіваюся, ця стаття була вам корисною! Я щось упустив? Поділіться вашим досвідом!

WordPress.com не дозволяє використовувати у блозі потенційно небезпечний код, однак є можливість публікації вихідного коду для перегляду. Ми створили тег, який зберігає форматування вихідного коду та навіть забезпечує підсвічування синтаксису для деяких мов. Приклад:

#button ( font-weight: bold; border: 2px solid #fff; )

Щоб отримати результат, аналогічний наведеному вище фрагменту, вставте свій код у ці теги:

Ваш код

Параметр «language» визначає мову та правила підсвічування синтаксису. Підтримуються такі значення:

  • actionscript3
  • coldfusion
  • csharp
  • delphi
  • erlang
  • fsharp
  • groovy
  • javascript
  • javafx
  • matlab
  • powershell
  • python
  • scala

Якщо значення "language" не встановлено, використовується значення "text" (без підсвічування синтаксису).
Код між тегами code буде автоматично закодований для відображення, тому вам не варто турбуватися про елементи HTML або про щось подібне.

Параметри конфігурації

Теги також підтримують безліч параметрів конфігурації, які можна використовувати для налаштування зовнішнього вигляду. Їхнє застосування зовсім необов'язково.

  • autolinks (true/false) — Кожна URL-адреса в коді відображається як гіперпосилання. Значення за замовчуванням: true.
  • collapse (true/false) — Якщо встановлено значення true, область коду буде загорнута під час завантаження сторінки. Для того, щоб розгорнути її, потрібно буде натиснути на неї. Це корисно для великих фрагментів коду. За замовчуванням встановлено значення false.
  • firstline (номер) - Визначає, з якого числа починається нумерація рядків. Значення за промовчанням: 1.
  • gutter (true/false) — Якщо встановлено значення false, номери рядків будуть приховані. Значення за замовчуванням: true.
  • highlight (номери, розділені комами) — Номери рядків, які будуть виділені, наприклад, «4,7,19».
  • hmtlscript (true/false) — Якщо встановлено значення true, підсвічується HTML/XML-код. Це корисно при публікації змішаного коду, наприклад PHP всередині HTML. Працює лише з деякими мовами. Значення за промовчанням: false.
  • light (true/false) — Якщо встановлено значення true, номери рядків та панель інструментів будуть приховані. Це корисно при розміщенні фрагмента коду з одного-двох рядків. Значення за промовчанням: false.
  • padlinenumbers (true/false/ціле число) — Дозволяє контролювати доповнення номерів рядків нулями. Значення true визначає автодоповнення, значення false відключає доповнення, число визначає фіксовану кількість знаків для номерів рядків.
  • toolbar (true/false) — Якщо встановлено значення false, панель інструментів з кнопками не відображатиметься. Значення за замовчуванням: true.
  • wraplines (true/false) — Якщо встановлено значення false, буде вимкнено перенесення рядків. За наявності довгих рядків з'явиться горизонтальна смуга прокручування.
  • title (рядок) – заголовок коду. Може бути корисним у поєднанні з параметром collapse.

Приклади використання наведених вище параметрів:

Цей рядок не виділено. Цей рядок виділено. Цей рядок виділено. Цей рядок не виділено. Це короткий фрагмент коду із доповненням номерів рядків нулями до 4 знаків. //У цьому прикладі відключено перенесення рядків. Щоб прочитати текст повністю, вам доведеться скористатися смужкою прокручування. Крім того, в цьому прикладі відключено нумерацію рядків і заховано панель інструментів.

А це фрагмент коду більший. Тут вибрано мову PHP та виділено рядок номер 12.

WordPress.com Code Example

WordPress.com Code Example

Цей рядок виділено. Очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-очень-дуже рядок.
This is an example of smart tabs.
WordPress.com

Подяки
Для реалізації цієї можливості використовується проект SyntaxHighlighter (автор Alex Gorbatchev). Користувачі можуть встановити відповідний

Вітають, друзі. Сьогодні ми з вами розберемося в тому, як змусити працювати будь-який PHP код у віджетах, статтях та сторінках WordPress. За замовчуванням така функція цієї CMS недоступна і максимум, на що може розраховувати користувач - це впровадження HTML коду.

Чому PHP код не працює за замовчуванням

Здавалося б, чому розробники не нагородили настільки популярний і зручний двигун корисними можливостями з автоматичного виконання PHP коду. Спочатку я замислювався про це, але дійшов висновку, що така політика ведеться з позиції безпеки, адже невміле застосування PHP у віджетах або всередині записів може призвести до непоправних наслідків – у базі даних щось порушиться і весь сайт крякне.

Тому робота з PHP віддана на відкуп програмістів або людей більш-менш просунутих у цьому питанні - безпосередньо у файлах будь-які скрипти виконуються.

Для публічних сайтів (там, де кілька авторів) виконання PHP у тілі статті підвищується ризик умисного саботажу, оскільки будь-який автор може отримати повний доступ до сайту через вікно редагування статей.

За ступенем небезпеки я розділив би всю цю ситуацію на 3 рівні:

  1. Залишити все, як задумали розробники – безпечно, випадково чи навмисне пошкодити сайт складно.
  2. Дозволити виконання PHP у віджетах – середній рівень небезпеки, лише адміністратор сайту має доступ.
  3. Застосування коду скрізь – небезпечно, тому що керувати сайтом може кожен, хто допущений до редагування статей та сторінок (модератори, автори)

Для чого потрібний PHP у віджетах

Питання індивідуальне, тому що реалізувати за допомогою цієї мови програмування можна все, що завгодно. Особисто мене до написання цієї посади підштовхнуло замовлення клієнта, сайт якого я зараз роблю. На ньому необхідно було вивести у сайдбарі в окремому віджеті список новин із однієї рубрики – «Новини». У стандартних віджетах WordPress немає такої можливості.

Питання стояло між пошуком плагіна з відповідними можливостями чи застосуванням нескладного PHP коду. Скрипт для такого завдання дійсно невеликий і навантажувати сайт зайвим плагіном, який більше ніде використовуватися не буде, не хотілося.

Загалом, дозволяючи виконання PHP, ми можемо вирішити 2 завдання:

  • Замінити частину плагінів сайту на скрипти та знизити в такий спосіб навантаження на хостинг;
  • Реалізувати функції, для яких плагінів поки що не існує.

На першому етапі я розповім про віджети, а потім окремим блоком для виведення коду в контенті.

Плагіни для PHP у віджетах

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

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

PHP Code Widget

Цей плагін я давно використовую у своїй роботі, він додає до списку доступних віджет, схожий на звичайний текстовий, тільки здатний обробляти крім тексту та HTML ще й PHP.

PHP Code Widget є в офіційному репозитарії WordPress, легко знаходиться за назвою. Як встановлювати такі плагіни.

Налаштування не потрібні, віджет у списку з'явиться відразу після встановлення та активації плагіна. У сайдбар перетягуєте PHP Code і додаєте туди будь-який скрипт.

PHP у віджеті WordPress без плагіна

В цьому випадку нам знадобиться хук, який замінятиме стандартну функцію, Що забезпечує роботу текстового WordPress віджету, функцією дозволяє обробляти PHP.

Такий хук додається у файл functions.php поточної теми (наприкінці перед закриває дужкою?>). Після цього нових варіантів віджету, як у випадку з плагіном, не з'являється, PHP коди починають працювати в стандартному текстовому.

Готовий код:

Add_filter("widget_text", "text_html_php_widget", 100); function text_html_php_widget($text) ( if(strpos($text,")".$text); $text = ob_get_contents(); ob_end_clean(); ) return $text; )

Перший рядок є фільтром, який замінює при кожному виклик стандартну функцію текстового віджету на нову – text_html_php_widget, а далі йде опис найновішої функції.

Навіщо PHP код у статтях та постах WordPress

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

Але й у постах буває потреба використання скриптів. Найчастіший приклад – це виведення картки сайту без плагіна. Щоправда, для карти можна використовувати інший прийом – зробити спеціальний шаблон сторінки (це окрема тема).

Мені одного разу знадобилося виводити PHP для наступної мети:

Я робив відео сайт. Серії серіалу виводилися у плейлистах за сезонами і треба було під кожним плейлистом сезону вивести список серій із посиланням на свою сторінку. Схоже на карту сайту, тільки складніше – робити висновки треба було списками окремих рубрик. Можна було вручну HTML кодом кожне посилання прописати, але там кілька сотень серій і процедура виснажлива. Тим більше, з появою нової серії посилання на неї довелося б додавати вручну – незручно. Ось я вирішив використовувати PHP функції для реалізації.

Плагін для виконання PHP у контенті Exec-PHP

Незважаючи на те, що цей плагін не оновлювався вже 7 років, він чудово справляється з обов'язками. І я його вибрав не просто так – він не використовує жодних шорткодів, як конкуренти, а дає можливість вставляти у записі WordPress коду чистому вигляді, починаючи з .

Плагін Exec-PHP є в репозитарії та встановлюється через меню в адмінці двигуна.

З налаштувань є тільки одна – дозвіл/заборона виконання коду в текстовому віджеті, можливості відключити роботу в постах і на сторінках відсутня, якщо треба її прибрати – деактивуємо плагін.

Для вставки PHP коду в статтю, необхідно перевести в HTML режим (вкладка «Текст»). Візуальний режим, швидше за все, код зіпсує.

Виконання PHP коду у статтях WordPress без плагіна

За аналогією з віджетами, ми можемо замінити плагін на спеціальну функцію, що дозволяє виконувати PHP скриптіву контенті. На жаль, мені не вдалося знайти варіант, при якому код працював би автоматично, як у випадку з плагіном, реагуючи на теги. Потрібне використання шорткоду. Моїх знань у PHP не вистачило для самостійного написання потрібної функції, за цим наводжу як є. Робота з шорткодом має істотний недолік, що ускладнює роботу, про нього я розповім нижче.

Як працювати з описаною нижче функцією

  1. Вставляємо її у файл functions.php теми;
  2. У потрібному місці статті вставляємо конструкцію - код, що виконується без

Функція:

/* Запуск php у статтях і сторінках WordPress: код */ function start_php($matches)( eval("ob_start();".$matches."$inline_execute_output = ob_get_contents();ob_end_clean();"); return $inline_execu ; ) function inline_php($content)( $content = preg_replace_callback("/\((.|\n)*?)\[\/startphp\]/", "start_php", $content); $content = preg_replace( "/\((.|\n)*?)\[\/startphp\]/", "$1", $content); return $content; ) add_filter("the_content", "inline_php");

Нестача

Якщо всередині PHP коду є HTML вставки або текст, то він працювати не буде. Будь-який текст або теги доведеться вставляти за допомогою команди echo, що не завжди зручно. Тобто код має бути чисто PHP-шний на 100 правильного формату.

Правильно

Echo "Так буде працювати";

Неправильно

Echo "Цей рядок правильний"; Так не працюватиме

У плагіні Exec-PHP такої проблеми немає – і текст і HTML виконаються, але всі елементи PHP коду мають бути обрамлені у відповідні теги.

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



Завантаження...
Top