Плагины являются основной частью того, почему WordPress миллионов полномочий блогов и сайтов по всему миру.
Возможность расширения WordPress для удовлетворения только о необходимости является мощным мотиватором для выбора WordPress по сравнению с другими альтернативами.Написав несколько плагинов себя, I’ ве пришли, чтобы узнать многих (но, конечно, не все) входы и выходы WordPress плагин development, и эта статья является кульминацией то, что я думаю, что каждый разработчик WordPress плагин должензнаю.Да, и имейте в виду все, что вы видите здесь совместимы с WordPress 3.0
Don’ T развиваться без Debugging
Первое, что нужно сделать при разработке плагинов WordPress, чтобы включить отладку, и я предлагаю оставить его на все время you’ пишете код плагина.Когда дела идут плохо, WordPress поднимает предупреждений и сообщений об ошибках, но если вы не можете их видеть, то они, возможно, также не поднимался вообще.
Включение отладки также включает WordPress отмечает, что важно, поскольку that’ с каким you’ будете знать, если you’ повторное использование любых устаревших функций.Устаревшие функции могут быть удалены из будущих версий WordPress, и почти каждый релиз WordPress содержит функции планируется умирают в более поздние сроки.Если вы видите, что вы используете устаревшие функции, it’ S возможное, чтобы найти его замену и использовать это instead.
Как включить Debugging
По умолчанию, WordPress отладки выключен, так чтобы он, откройте WP-config.php (совет: сделайте резервную копию этого файла, который вы можете вернуться позже, если это необходимо) в корневом каталоге WordPressустановка и смотреть на эту строку:
define('WP_DEBUG', false);
Заменить эту строку со следующим:
// Turns WordPress debugging on define('WP_DEBUG', true); // Tells WordPress to log everything to the /wp-content/debug.log file define('WP_DEBUG_LOG', true); // Doesn't force the PHP 'display_errors' variable to be on define('WP_DEBUG_DISPLAY', false); // Hides errors from being displayed on-screen @ini_set('display_errors', 0);
С этих строк добавлены в WP-config.php, отладки полностью включен.Here’ S примере обратите внимание, что получил войти в / wp-content/debug.log для использования устаревших функций:
[15-Feb-2011 20:09:14] PHP Notice: get_usermeta является deprecated начиная с версии 3.0!Используйте get_user_meta () вместо.в C: \ Code \ Plugins \ WordPress \ WP-включает в себя \ functions.php на линии 3237
С включенной отладкой, держать закрыть глаза на / wp-content/debug.log, как вы развивать свой плагин.Это спасет вас, ваших пользователей и других разработчиков плагинов много headaches.
Как войти собственный Debug Statements
Так что по поводу регистрации собственного заявления отладку?Ну, самый простой способ состоит в использовании echo
и увидеть текст на странице.It’ S быстрый и грязный хак способ для отладки, но все это сделал тот или иной момент.Лучше было бы создать функцию, что делает это для вас, и тогда вы сможете увидеть все ваши собственные заявления отладку в debug.log файл со всем else.
Here’ SA функцию можно использовать, заметить, что это только регистрирует сообщения, если WP_DEBUG включено:
function log_me($message) { if (WP_DEBUG === true) { if (is_array($message) || is_object($message)) { error_log(print_r($message, true)); } else { error_log($message); } } }
И тогда вы можете позвонить в log_me
функцию следующим образом:
log_me(array('This is a message' => 'for debugging purposes')); log_me('This is a message for debugging purposes');
Использование Бар BlackBox Debug Plugin
Я только недавно обнаружил этот плагин, но it’ S уже была огромная помощь, как я работаю на моих собственных плагинов. BlackBox Плагин добавляет тонкой черной полосой в верхней части любой пост WordPress или страницы, а также предоставляет быстрый доступ к ошибкам, глобальные переменные данные профиля, и SQL queries.
Нажав на вкладку Глобальные в баре показывает все глобальные переменные и их значения, которые были частью запроса, по существу, все в $ _GET, $ _POST, $ _COOKIE, $ _SESSION и $ _SERVER Переменные:
Следующая вкладка Profiler, в котором отображается время, прошедшее с профилировщиком была начата и общий объем памяти, WordPress использует, когда контрольно-пропускной пункт был достигнут:
Вы можете добавить свои собственные контрольно-пропускные пункты в Profiler, поставив эту строку кода в любом месте вашего плагина, где вы хотите, чтобы захватить измерения:
apply_filters('debug', 'This is a checkpoint');
Пожалуй, самое ценное вкладки в плагине BlackBox является SQL вкладка, которая показывает все базы данных, запросов, которые выполняются как часть запроса.Очень полезно для определения длительных обращений к базе данных:
И, наконец, у нас есть ошибки, вкладка, в которой перечислены все уведомления, предупреждения и ошибки, которые произошли во время запроса:
По обеспечивая быстрый доступ к необходимой информации отладки, плагин BlackBox большой таймер, когда дело доходит до отладки вашего WordPress plugin.
Префикс ваших Functions
Одна из первых вещей, которую укусил меня, когда я приступила к разработке плагинов WordPress было узнать, что другие разработчики плагина иногда используют те же имена для функций, которые я использую.Например, имена функций, как copy_file()
save_data()
, а database_table_exists()
есть приличный шанс быть использована другими плагинами в дополнение к yours.
Причина этого в том, что, когда активизируется WordPress плагин, PHP загружает функции из плагина в пространстве WordPress исполнения, в котором все функции из всех плагинов жить вместе.Существует никакого разделения или выделения функций для каждого плагина, который означает, что каждая функция должна быть однозначно named.
К счастью, есть простой способ решить эту проблему, иit’ ы, чтобы назвать все ваши функции плагина с префиксом.Например, общие функции я уже упоминал может выглядеть следующим образом:
function myplugin_copy_file() { } function myplugin_save_data() { } function myplugin_database_table_exists() { }
Другой распространенный именования является использование префиксов, что является аббревиатурой от вашего plugin’ имя с, таких как “ Мое Высокий WordPress Plugin”, и в этом случае имена функций будет:
function mawp_copy_file() { } function mawp_save_data() { } function mawp_database_table_exists() { }
Существует одно предостережение для этого, однако.Если вы используете PHP классы, которые содержат ваши функции (которая во многих случаях является хорошей идеей), то don’ т действительно придется беспокоиться о столкновении с функцией определенные в другом месте.Например, let’, у вас есть класс в ваш плагин с именем “ CommonFunctions” с copy_file()
функции, а другой плагин имеет те же copy_file()
функция, определенная, но не в классе.Вызов две функции будет выглядеть примерно так:
// Calls the copy_file() function from your class $common = new CommonFunctions(); $common->copy_file(); // Calls the copy_file() function from the other plugin copy_file();
С помощью классов, необходимость явно префикс ваших функций идет away. Просто имейте в виду, что WordPress вызовет ошибку, если вы используете имя функции that’ S уже приняты, так что следите за отладки.лог-файле знать, если you’ повторное в открытом или not.
Глобальный пути Handy
Написание PHP код, чтобы сделать вашу работу плагина это одно, но если вы хотите, чтобы она выглядела и хорошо себя чувствовать в то же время, you’ должны будете включать некоторые изображения, CSS, и, возможно, немного JavaScript, а также (Может быть, в виде JQuery плагин).И в типичной манере, you’ VL, скорее всего, организовать эти файлы в свои папки, такие как “ images” “ css”, и “ js”.
That’ все, конечно, хорошо, но как вы коде плагина, так что он всегда может найти эти файлы, независимо от того, какой домен плагин работает под?Самый лучший способ, что I’ Нашел является создать свою собственную глобальную paths который может быть использован в любом месте вашего плагина code.
Я, например, всегда создают четыре глобальные переменные для моих плагинов, один для каждого из следующих:
- Путь к теме directory
- Имя plugin
- Путь к плагину directory
- Адрес plugin
Для которым код выглядит следующим образом:
if (!defined('MYPLUGIN_THEME_DIR')) define('MYPLUGIN_THEME_DIR', ABSPATH . 'wp-content/themes/' . get_template()); if (!defined('MYPLUGIN_PLUGIN_NAME')) define('MYPLUGIN_PLUGIN_NAME', trim(dirname(plugin_basename(__FILE__)), '/')); if (!defined('MYPLUGIN_PLUGIN_DIR')) define('MYPLUGIN_PLUGIN_DIR', WP_PLUGIN_DIR . '/' . MYPLUGIN_PLUGIN_NAME); if (!defined('MYPLUGIN_PLUGIN_URL')) define('MYPLUGIN_PLUGIN_URL', WP_PLUGIN_URL . '/' . MYPLUGIN_PLUGIN_NAME);
Наличие этих глобальных путей определен позволяет мне писать код в моем плагине где угодно мне нужно, и я знаю, что это решение правильно для любого веб-сайта, который использует плагин:
$image = MYPLUGIN_PLUGIN_URL . '/images/my-image.jpg'; $style = MYPLUGIN_PLUGIN_URL . '/css/my-style.css'; $script = MYPLUGIN_PLUGIN_URL . '/js/my-script.js';
Магазин версии плагина для Upgrades
Когда дело доходит до WordPress плагины, одна из вещей, you’ будете иметь дело с рано или поздно это обновление.Например, let’ Скажем первую версию плагина требуется одна база данных таблицы, но следующая версия требует другой таблице.Как вы знаете, если вы должны запустить код, который создает вторую таблицу базы данных
Я предлагаю хранение версии плагина в базе данных WordPress, так что вы можете прочитать его позже, чтобы решить определенные действия обновлении плагина следует принять.Чтобы сделать это, you’ понадобится создать несколько более глобальнойпеременных и ссылаться на add_option()
функции:
if (!defined('MYPLUGIN_VERSION_KEY')) define('MYPLUGIN_VERSION_KEY', 'myplugin_version'); if (!defined('MYPLUGIN_VERSION_NUM')) define('MYPLUGIN_VERSION_NUM', '1.0.0'); add_option(MYPLUGIN_VERSION_KEY, MYPLUGIN_VERSION_NUM);
Я, конечно, мог бы просто называется add_option('myplugin_version', '1.0.0');
без необходимости использования глобальных переменных, но, как глобальные переменные пути, I’ Нашел это как удобный для использования в других частях плагинов, таких как панель или о странице.
Отметим также, что update_option()
можно было бы использовать вместо add_option()
.Разница в том, что add_option()
ничего не делает, если параметр уже существует, в то время как update_option()
проверяет, есть ли возможность уже существует, и если он doesn’ т, он будет добавить опцию к базе данных с помощью add_option()
, в противном случае,он обновляет опции со значением provided.
Потом, когда приходит время, чтобы проверить, действительно ли выполнять действия по обновлению, ваш плагин будет в конечном итоге с кодом, который выглядит примерно так:
$new_version = '2.0.0'; if (get_option(MYPLUGIN_VERSION_KEY) != $new_version) { // Execute your upgrade logic here // Then update the version value update_option(MYPLUGIN_VERSION_KEY, $new_version); }
Использование dbDelta (), чтобы создать / обновить базу данных Tables
Если Ваш плагин требует от своих собственных таблиц базы данных, вы неизбежно должны изменить эти таблицы в будущих версиях плагина.Это может стать немного сложнее управлять, если you’ не будете осторожны, но WordPress помогает решить эту проблему, предоставляя dbDelta()
function.
Полезная функция dbDelta()
функции является то, что она может быть использована как для создания и обновления таблиц, но по странице WordPress Кодекс “ Создание таблиц с Plugins” , it’ SA немного придирчивы:
- Вы должны поставить каждого поля в отдельной строке в SQL statement.
- Вы должны иметь два пробела между словами PRIMARY KEY и определение основного key.
- Вы должны использовать ключевое слово KEY, а не его синоним INDEX, и вы должны включать, по крайней мере один KEY.
Зная эти правила, мы можем использовать функцию, чтобы создать таблицу, содержащую ID, имя и адрес электронной почты:
function myplugin_create_database_table() { global $wpdb; $table = $wpdb->prefix . 'myplugin_table_name'; $sql = "CREATE TABLE " . $table . " ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100) NOT NULL DEFAULT '', email VARCHAR(100) NOT NULL DEFAULT '', UNIQUE KEY id (id) );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); }
Важно: dbDelta()
функция находится в wp-admin/includes/upgrade.php, но она должна быть включена вручную, потому что it’ ы не загружаются по default.
Итак, теперь у нас есть таблица, но в следующей версии мы должны увеличить размер имя столбца от 100 до 250.К счастью dbDelta()
делает это просто, и используя наши обновления логики ранее, следующая версия плагина будет иметь код, подобный этому:
$new_version = '2.0.0';if (get_option(MYPLUGIN_VERSION_KEY) != $new_version) {
myplugin_update_database_table();
update_option(MYPLUGIN_VERSION_KEY, $new_version);
}function myplugin_update_database_table() {
global $wpdb;
...
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров