Пошаговая инструкция для новичка: Создание wordpress плагина
Здравствуйте, уважаемые посетители и гости блога Валерия Бородина! Сегодня нашей темой для разговора будет, создание wordpress плагина. Мы с вами создадим для примера простенький плагин вывода отзывов о нашем блоге. Вы скажите, что такие плагины уже существуют. Ну и что, зато это будет плагин, который создан самостоятельно. И нам с вами будет приятно это осознавать, а за одно и займемся саморазвитием и самообразованием! Давайте приступим к исполнению …
Пошаговое создание wordpress плагина отзывов для блога
Первое, что необходимо нам сделать, это придумать уникальное имя для нашего плагина. Например “MyOtzyv”.
Второй момент, создадим папку с названием нашего нового плагина на хостинге по адресу:/wp-content/plugins/папка вашего плагина в моем случае “MyOtzyv”. И в папке “MyOtzyv” создадим файл MyOtzyv.php.
Третий шаг в создании плагина. Заполняем наш основной файл MyOtzyv.php необходимым содержимым.
Вначале идет информация о плагине и его создателе:
<?php /* Plugin Name: MyOtzyv Description: Отзывы о блоге Version: 1.0 Author: Валерий Бородин Author URI: https://pribylwm.ru/ */
После вставки данного кода нужно его сохранить в файле нового плагина и можно уже посмотреть, что получилось. заходим в консоль нашего блога и видим, что наш плагин уже появился в админпанели сайта:
Видите непонятные ромбики вместо букв, это потому, что кодировка в файле не в UTF-8. Давайте изменим кодировку и посмотрим, что получится:
Вот теперь другое дело, все читается и красиво выглядит. Дальше заполняем файл MyOtzyv.php. Пропишем вот такой код для обработки данных:
// Stop direct call if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You are not allowed to call this page directly.'); } if (!class_exists('MyOtzyv')) { class MyOtzyv { // Хранение внутренних данных public $data = array(); // Конструктор объекта // Инициализация основных переменных function MyOtzyv() { } } } global $rprice; $rprice = new MyOtzyv();
Потом добавим в файл еще вот такой кусок кода в котором будут содержаться “хуки” или функции в данном случае это функции активации, деактивации и функция удаления плагина:
function MyOtzyv() { global $wpdb; // Объявляем константу инициализации нашего плагина DEFINE('MyOtzyv', 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') ); }
Далее вставим вот этот код, который позволит нашему плагину реализовать выше указанные “хуки” – функции:
/** * Активация плагина */ 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"); }
Костяк плагина готов. Теперь нам нужно доделать рабочую часть плагина. Для этого вставим данный код в наш файл:
// Если мы в адм. интерфейсе 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')); }
Теперь давайте подключим скрипты и стили к нашему плагину добавив вот этот кусок кода в файл:
/** * Загрузка необходимых скриптов для страницы управления * в панели администрирования */ 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'); }
Следующий шаг, создание меню в консоли административной панели блога. Для этого добавляем вот этот код:
/** * Генерируем меню */ function admin_generate_menu() { // Добавляем основной раздел меню add_menu_page('Добро пожаловать в модуль управления отзывами', 'Отзывы', 'manage_options', 'edit-reviews', array(&$this, 'admin_edit_reviews')); // Добавляем дополнительный раздел add_submenu_page( 'edit-reviews', 'Управление содержимом', 'О плагине', 'manage_options', 'plugin_info', array(&$this,'admin_plugin_info')); }
И теперь давайте все сделанное сохраним на хостинге и посмотрим, что получилось:
Вот так вот симпатично смотрится в консоли меню нашего нового плагина отзывов на блоге MyOtzyv.
Теперь давайте добавим необходимый функционал для выведения контента на страницах блога, чтобы можно было редактировать отзывы на блоге. Для этого добавляем вот этот код:
/** * Выводим список отзывов для редактирования */ public function admin_edit_reviews() { global $wpdb; $action = isset($_GET['action']) ? $_GET['action'] : null ; switch ($action) { case 'edit': // Получаем данные из БД $this->data['review'] = $wpdb->get_row("SELECT * FROM `" . $this->tbl_adv_reviews . "` WHERE `ID`= ". (int)$_GET['id'], ARRAY_A); // Подключаем страницу для отображения результатов include_once('edit_review.php'); break; case 'submit': $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']), ); $editId=intval($_POST['id']); if ($editId == 0) return false; // Обновляем существующую запись $wpdb->update( $this->tbl_adv_reviews, $inputData, array( 'ID' => $editId )); // Показываем список отзывов $this->admin_show_reviews(); break; case 'delete': // Удаляем существующую запись $wpdb->query("DELETE FROM `".$this->tbl_adv_reviews."` WHERE `ID` = '". (int)$_GET['id'] ."'"); // Показываем список отзывов $this->admin_show_reviews(); break; default: $this->admin_show_reviews(); } } /** * Функция для отображения списка отзывов в адм. панели */ private function admin_show_reviews() { global $wpdb; // Получаем данные из БД $this->data['reviews'] = $wpdb->get_results("SELECT * FROM `" . $this->tbl_adv_reviews . "`", ARRAY_A); // Подключаем страницу для отображения результатов include_once('view_reviews.php'); } /** * Показываем статическую страницу */ public function admin_plugin_info() { include_once('plugin_info.php'); }
Для вывода на страницах блога нашего плагина нужно добавить в запись вот такой вот шорткод [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 ); }
Вот примерно то, что должно получиться у Вас после применения всех действий, которые я описал в данном материале:
Создание wordpress плагина, как оказалось не очень трудное дело. Всем у кого создание wordpress плагина вызвало затруднения, можно скачать файл с готовым плагином и попробовать уже разобраться со всеми возникшими вопросами на примере готового исходного материала.
Скачать плагин отзывов на блоге “MyOtzyv” можно здесь
Вы устали ходить пешком? И не знаете где приобрести выгодно хороший автомобиль? Я вам сейчас расскажу! Вот здесь avtotochki.ru/poi/view/3634567818112/ прекрасный выбор авто на выгодных для Вас условиях!
Всем спасибо за внимание! Всегда Ваш Валерий Бородин