Полезные вставки (фрагменты) кода для WordPress. Как написать плагин для WordPress Бесконфликтное подключение скриптов и стилей в WordPress

Полезные вставки (фрагменты) кода для WordPress. Как написать плагин для WordPress Бесконфликтное подключение скриптов и стилей в WordPress

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

Кроме стандартов к написанию самого кода PHP, также есть стандарты документирования кода - это комментарии к функциям и хукам: PHP Documentation Standards (англ.)

Одинарные и двойные кавычки

Если в строке нет переменных, используйте одинарные кавычки, в других случаях двойные. Не нужно экранировать кавычки в строке и если они они есть, то рекомендуется их чередовать:

Echo "Link name"; echo "$linkname";

Вторая строка в этом примере не очищает выводимые переменные, а это необходимо делать в целях безопасности. Поэтому для такой записи, переменные должны быть очищены заранее. В целом, такую запись можно считать неприемлемой! См. раздел учебника безопасный вывод .

Отступы

Отступ должен всегда показывать логическую структуру кода. Используйте табуляцию (клавиша Tab), а не пробелы - это дает больше гибкости. Пробелы стоит использовать, когда нужно выравнять что-либо внутри строки.

Правило: табуляция должна быть использована в начале строки для отступа, в то время как пробелы могут быть использованы в середине строки для выравнивания.

If (условие) { $foo = "somevalue"; $foo2 = "somevalue2"; $foo_bar = "somevalue3"; $foo5 = "somevalue4"; }

А так код выглядит, если показать невидимые символы табуляции и пробела:

If (условие) { ---$foo.....= "somevalue"; ---$foo2....= "somevalue2"; ---$foo_bar.= "somevalue3"; ---$foo5....= "somevalue4"; }

Для ассоциативных массивов, значения должны начинаться с новой строки. Рекомендуется ставить «последнюю» запятую при перечислении элементов массива - так удобнее добавлять новые элементы...

$my_array = array(---"foo"...=> "somevalue", ---"foo2"..=> "somevalue2", ---"foo3"..=> "somevalue3", ---"foo34".=> "somevalue3",);

Стиль фигурных скобок

Фигурные скобки должны использоваться для всех блоков в стиле, как показано ниже:

If (условие) { action1(); action2(); } elseif (условие2 && условие3) { action3(); action4(); } else { defaultaction(); }

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

Следует комментировать любой код, который интуитивно не понятен.

Используйте фигурные скобки всегда, даже если они не требуются.

If (условие) { action0(); } if (условие) { action1(); } elseif (условие2) { action2a(); action2b(); } foreach ($items as $item) { process_item($item); }

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

$var = "dangerous""; // необработанные данные, которые могут быть экранированы или не экранированы $id = some_foo_number(); // данные ожидаются как число, но мы не уверены $wpdb->query($wpdb->prepare("UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id));

%s используется для строк и %d для целых чисел. Обратите внимание, что они не "в кавычках" ! $wpdb->prepare() сам экранирует строки и добавляет кавычки, если надо. Преимущество prepare() в том, что не нужно помнить о ручном использовании esc_sql() , а также, что строка запроса с плейсхолдерами более наглядна, чем если бы там использовались переменные обернутые в esc_sql() .

Запросы базы данных

Старайтесь не писать прямых запросов к базе данных. Если есть подходящая функция, а их в WP много, которая может получить необходимые данные - используйте ее.

Использование функций вместо запросов, помогает сохранить будущую совместимость кода. Кроме того многие функции работают с кэшем, а это может значительно ускорить работу кода.

Имена классов, функций, файлов, констант, переменных

Имена функций, переменных, хуков

Используйте строчные буквы a-z в переменных, хуках и названиях функций и никогда CamelCase . Разделяйте отдельные слова нижним подчеркиванием _ . Не сокращайте имена переменных без необходимости; пусть код будет однозначным и само-документированным.

Function some_name($some_variable) { [...] }

Имена классов

Нужно использовать слова с Заглавных_Букв, разделенные подчеркиванием. Любые сокращения (акронимы, аббревиатуры) должны быть ПРОПИСНЫМИ.

Class Walker_Category extends Walker { [...] } class WP_HTTP { [...] }

Константы должны быть словами в ВЕРХНЕМ_РЕГИСТРЕ, разделенные нижним подчеркиванием:

Define("DOING_AJAX", true);

Названия файлов

Должны быть понятные и должны также содержать только строчные буквы, а слова должны разделяться дефисом - .

My-plugin-name.php

Названия файлов классов

Должны быть основаны на имени класса с приставкой class- , подчеркивания в имени класса заменены дефисом, например WP_Error становится:

Class-wp-error.php

Этот стандарт именования файлов справедлив для всех существующих и новых файлов с классами. Однако существуют файлы исключения: class.wp-dependencies.php , class.wp-scripts.php , class.wp-styles.php . Эти файлы имеют префикс class. , точка после слова class вместо дефиса.

Понятные значения переменных в параметрах функций

Булевам, предпочтительны строковые значения. Т.е. вместо true/false при вызове функций лучше использовать какую-то объясняющую значение параметра строку.

Плохой код:

Function eat($what, $slowly = true) { ... } eat("mushrooms"); eat("mushrooms", true); // что означает true? eat("dogfood", false); // что означает false, противоположность true?

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

Хороший код:

Function eat($what, $speed = "slowly") { ... } eat("mushrooms"); eat("mushrooms", "slowly"); eat("dogfood", "quickly");

Когда нужно больше параметров функции, используйте массив $args . Он даже лучше!

Очень хороший код:

Function eat($what, $args) { ... } eat("noodles", array("speed" => "moderate"));

Интерполяция для имен динамических хуков

Для удобства чтения и обнаружения, хуки с переменными в названии должны быть интерполирован (заключен в фигурные скобки { и }), и не должны конкатенироваться:

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

// правильно do_action("{$new_status}_{$post->post_type}", $post->ID, $post); // неправильно do_action($new_status ."_". $post->post_type, $post->ID, $post);

Там, где это возможно, динамические значения в именах тегов также должны быть максимально краткими и точными. $user_id гораздо понятнее чем, скажем, $this->id .

Тернарный оператор

Тернарные операторы хороши, но в них рекомендуется всегда проверять правдивое утверждение, а не ложное. Иначе он просто вводит в заблуждение из-за двойного отрицания. Исключение - это использование! empty() , потому что по-другому иногда просто сложно записать.

Как нужно проверять:

// (если условие выполняется = true) ? (то делаем это) : (иначе это); $music_type = ("jazz" == $music) ? "cool" : "blah"; // (если значение не пустое - ! empty) ? (то делаем это) : (иначе это);

Как не следует писать:

// (если условие не выполняется!= true) ? (то делаем это) : (иначе это); $music_type = ("jazz" != $music) ? "blah" : "cool";

Условия Магистра Йоды

При выполнении логических сравнений, всегда ставьте константы или литералы - слева, а переменную - справа.

If (true == $the_force) { $victorious = you_will($be); }

Если пропустить второй знак = в приведенном примере (признаться, это происходит даже с самыми опытными из нас), то мы получим ошибку PHP и сразу её увидим, потому что код не будет работать. А вот если бы конструкция была обратной - $the_force = true , то условие всегда будет выполняться и никакой ошибки мы не увидим, и можем пропустить такой серьезный баг, который к тому же иногда сложно отловить!

К такому «перевернутому» написанию просто нужно привыкнуть.

Это относится и к == , != , === и!== . «Условия Йоды» для < , > , <= или >= значительно труднее читать и тут их лучше не использовать.

Умный код

Если говорить коротко, то читаемость кода должна быть на первом плане, она важнее краткости или каких-то не очевидных, но удобных сокращений.

Isset($var) || $var = some_function(); // или! isset($var) && $var = some_function();

Да - это крутая запись, видно что сделал её опытный программист. Но любому другому разработчику, а зачастую даже и автору, для того чтобы разобраться в такой записи нужно немного вникать и потратить лишние секунды или минуты. Это не очевидная и не понятная запись и её нужно избегать, и лучше её записать длиннее, но понятнее:

If (! isset($var)) { $var = some_function(); }

Оператор подавления ошибок @

PHP поддерживает один оператор управления ошибками: знак @ . В случае, если он предшествует какому-либо выражению в PHP-коде, любые сообщения об ошибках, генерируемые этим выражением, будут проигнорированы.

В то время как этот оператор существует в ядре, он часто используется потому что лень нормально обработать переменную. Его использование настоятельно не рекомендуется , так как даже PHP документация заявляет:

Внимание: На сегодняшний день оператор "@" подавляет вывод сообщений даже о критических ошибках, прерывающих работу скрипта. Помимо всего прочего, это означает, что если вы использовали "@" для подавления ошибок, возникающих при работе какой-либо функции, в случае если она недоступна или написана неправильно, дальнейшая работа скрипта будет остановлена без каких-либо уведомлений.

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 файлов в один и отдавать в сжатом виде браузеру для оптимизации...

Смею предположить, что в вашей жизни возникали случаи, когда вам захотелось что-либо добавить (подправить) в теме вашего сайта 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. Постарайтесь сделать всё возможное дабы упростить свою жизнь в будущем, в части вашей нелёгкой доли устранения багов и редактирования кастомного кода по мере возникновения сей необходимости.

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" я узнал совсем недавно, а до этого мне приходилось хранить весь используемый код в отдельном текстовом файле и вставлять его лишь после полного написания статьи и перед нажатием кнопки "Опубликовать ". После того, как я оценил удобство использования этой функции на другие плагины подсветки синтаксиса мне даже и смотреть не хочется:)

Однажды Вы решили создать свой сайт или блог, а для системы управления Вы выбрали 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 = $wpdb->prefix . "adv_reviews"; // Функция которая исполняется при активации плагина register_activation_hook($this->plugin_name, array(&$this, "activate")); // Функция которая исполняется при деактивации плагина register_deactivation_hook($this->plugin_name, 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, `review_user_name` VARCHAR(200) NULL, `review_user_email` 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"); wp_register_script("jquery", $this->plugin_url . "js/jquery-1.4.2.min.js"); // Добавляем скрипты на страницу wp_enqueue_script("advReviewsAdminJs"); wp_enqueue_script("jquery"); } /** * Загрузка необходимых стилей для страницы управления * в панели администрирования */ function admin_load_styles() { // Регистрируем стили wp_register_style("advReviewsAdminCss", $this->plugin_url . "css/admin-style.css"); // Добавляем стили wp_enqueue_style("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 (); return $output; } 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», то сначала добавляется новый отзыв. Но стоит обратить внимание на буферизацию вывода. Она необходима для того, что бы получить данные вставляемой страницы.

Вот собственно и все. Теперь можно посмотреть, что у нас получилось. А скачать плагин и исходные коды можно вот .

Само собой это только пример создания плагина, но и сойдет как простая гостевушка, если ее немного доработать, например, добавить защиту от ботов и постраничный вывод. Удачного кодинга:)

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

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

Редактирование отзыва:

Возможно также вам будет интересно:




top