Примеры написания кода в wp. Как написать плагин для WordPress. Выводим PDF файл во фрейме

WordPress – это одна из самых популярных CMS. Изначально WordPress создавался как блоговый движок, но из-за популярности данной системы управления сайтом разработано множество дополнений и плагинов, что позволяет создавать различные виды сайтов. Конечно, как и в других движках в WP, много разных подводных камней, о которых нужно знать вебмастеру.

Основные функции движка WordPress

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

Заголовок H1 в WordPress

В этой статье рассмотрим, как избежать дублирования заголовка первого уровня H1 в WordPress. Есть известное правило, что заголовок первого уровня H1 должен быть только один на странице, но большинство тем оформления WordPress сделано таким образом, что H1 ...

Создание виджетов WordPress

В данной статье речь пойдет о создании собственных виджетов WordPress. Рассмотрим: создание виджета WordPress непосредственно в теме оформления, создание собственного плагина, который будет выводить виджет, отключение стандартных виджетов WordPress ...

Как очистить head в WordPress от ненужного кода?

По умолчанию WordPress выводит код в head, который в большинстве случаев совершенно не нужен. В этой небольшой статье рассмотрим, как избавиться от лишнего мусорного кода на сайте. В первую очередь удалим все ненужные ссылки: RSS-ленты, версию WordPress ...

Бесконфликтное подключение скриптов и стилей в WordPress

Бесконфликтный метод необходим по нескольким причинам: предотвращает конфликт при подключении одного скрипта разными плагинами. При таком подключении метод позволяет объединить несколько js файлов в один и отдавать в сжатом виде браузеру для оптимизации...

Flector 5

WP-Syntax

Несколько раз в комментариях меня спрашивали, что за плагин я использую для вставки кода в текст статей и комментариев. Так вот, отвечаю - это WP-Syntax . На самом деле плагинов для вставки кода не один десяток и какой именно из этих плагинов использовать решать только вам. Мне же понравился WP-Syntax тем, что он очень прост в использовании, поддерживает синтаксис кучи языков программирования, а также умеет исправлять испорченный визуальным редактором код, преобразовывая HTML -коды символов в сами символы.

Скачиваем плагин с его домашней страницы и устанавливаем его:

1. Распаковываем архив.

2. Копируем папку wp-syntax в /wp-content/plugins/ .

3. Заходим в админку блога на вкладку "Плагины " и активируем плагин.

Никаких настроек в плагине нет и после активации плагина вы уже можете начать вставлять код в ваши статьи. Правильный синтаксис вставки кода выглядит так:

Код
, где LANGUAGE это обозначение языка программирования, а line="1" это необязательный параметр, указывающий плагину включить нумерацию строк кода с указанного номера. Список обозначения языков программирования вы можете посмотреть , но для большинства языков обозначение будет равно названию языку (php , java , css , perl , sql и др.). Примеры использования:

1. PHP , без нумерации строк.

\\ n" ; } ?>

2. JAVA , c нумерацией строк.

1 2 3 4 5 public class Hello { public static void main(String args) { System .out .println ("Hello World!" ) ; } }

public class Hello { public static void main(String args) { System.out.println("Hello World!"); } }

3. Ruby , c нумерацией строк, начиная с 18 строки.

18 19 20 21 22 class Example def example(arg1) return "Hello: " + arg1.to_s end end

class Example def example(arg1) return "Hello: " + arg1.to_s end end

Одна из интересных особенностей плагина состоит в том, что он умеет преобразовать HTML -коды символов в сами символы. То есть с этой функцией вам не придется беспокоиться насчет того, что визуальный редактор испортит вам вставленный код (сами теги

 и 
должны быть вставлены не в визуальном редакторе). Для этого надо использовать параметр escaped="true" и тогда код вида:

 
Hello

превратится в:

> Hello>

Hello

Если честно, то про эту функцию с escaped="true" я узнал совсем недавно, а до этого мне приходилось хранить весь используемый код в отдельном текстовом файле и вставлять его лишь после полного написания статьи и перед нажатием кнопки "Опубликовать ". После того, как я оценил удобство использования этой функции на другие плагины подсветки синтаксиса мне даже и смотреть не хочется:)

Приветствуют, друзья. Сегодня мы с вами разберемся в том, как заставить работать любой 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_execute_output; } 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 кода должны быть обрамлены в соответствующие теги.

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

Читабельность кода - это очень больная тема, и ей нужно уделять должное внимание. В этой статье вы узнаете о 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(); // плохо $query = "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(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) WHERE 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. Рефакторинг

Рефакторинг - это изменение кода без потери функциональности. Его также можно применять для улучшения читабельности.Тут нет места исправлению багов или добавлению функциональности. Вы просто немного меняете структуру вашего кода.

Надеюсь, эта статья была вам полезна! Я что-то упустил? Поделитесь вашим опытом!