По мере того, как вы продолжаете писать для WordPress все больше и больше, уровень сложности и сложности ваших плагинов в конечном итоге выйдет далеко за пределы простой внутренней обработки данных, как показано в нашей статье для начинающих . В этой части мы подробно рассмотрим взаимодействие с базой данных, виджеты администратора и виджеты боковой панели. Сегодняшним примером будет пользовательский плагин «Most Popular by Views», который создает для нас виджет административной области и виджет боковой панели для посетителей.
Шаг 0. Что это будет делать?
Прежде чем мы откроем нашу IDE или напишем какой-либо код, вы всегда должны составить список функций, которые ваш плагин будет иметь и не будет иметь (по крайней мере, на начальном этапе вы всегда сможете расширить его позже). Для нашего плагина «Самые популярные по просмотрам» нашей основной функцией является отображение списка самых популярных постов (скажем, топ-10). Во-вторых, мы также разместим список в админке как некий высокотехнологичный анализ. Наконец, мы дадим разработчикам возможность отображать его где угодно, делая его доступным в качестве виджета боковой панели и с помощью простой функции.
Функции:
- Создает список из десяти самых популярных сообщений на основе просмотров
- Список отображается в области администрирования в виде низкотехнологичной аналитики
- Список доступен как виджет боковой панели и функции
Шаг 1. База данных
Прежде чем мы сможем отобразить самые популярные сообщения, нам нужно собрать данные о том, какие сообщения просматриваются и как часто, но даже прежде чем мы сможем это сделать, нам нужно где-то разместить все эти данные. Внутри нового файла плагина давайте создадим новую функцию ( ppbv_create_table ), которая проверит, существует ли наша таблица. Если этого не произойдет, мы создадим его. Наш способ сделать это довольно прост; мы будем использовать $ wpdb-> get_results для запуска оператора SQL, который проверяет таблицу с именем «wp_popular_by_views». Если таблица не найдена, get_results вернет ноль. Если это так, мы будем использовать $ wpdb-> query для записи в новую таблицу. Мы запускаем эту функцию каждый раз, когда плагин активирован.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<?php
/**
* Plugin Name: Popular Posts by Views
* Plugin URI: http://net.tutsplus.com
* Description: Create a widget to show your most popular articles based on views.
* Version: 1.0
* Author: Jonathan Wolfe
* Author URI: http://fire-studios.com
* License: GPL2
* .
* This plugin and its accompanying tutorial are written for Nettuts+ at http://net.tutsplus.com
* .
*/
global $wpdb;
$ppbv_tablename = $wpdb->prefix.’popular_by_views’;
function ppbv_create_table(){
global $wpdb, $ppbv_tablename;
$ppbv_table = $wpdb->get_results(«SHOW TABLES LIKE ‘{$ppbv_tablename}'» , ARRAY_N);
if(is_null($ppbv_table)){ // if we don’t have a table
$create_table_sql = «CREATE TABLE {$ppbv_tablename} (
id BIGINT(50) NOT NULL AUTO_INCREMENT,
post_id VARCHAR(255) NOT NULL,
views BIGINT(50) NOT NULL,
PRIMARY KEY (id),
UNIQUE (id)
);»; // be careful with SQL syntax, it can be VERY finiky
$wpdb->query($create_table_sql);
}
}
register_activation_hook(__FILE__,’ppbv_create_table’);
?>
|
Шаг 2. Сбор данных
Теперь, когда у нас есть таблица для хранения наших данных, нам нужно перехватить наши данные. Мы создадим новую функцию ( ppbv_page_viewed ), которую мы прикрепим к хуку wp_head, чтобы она запускалась при каждой загрузке страницы. Внутри этой функции мы собираемся сделать одну из двух вещей, после того как проверим, есть ли текущая страница в базе данных: увеличить ее количество просмотров на единицу или, если ее нет в базе данных, добавить ее в базу данных. Чтобы выяснить, находится ли текущая страница в базе данных, мы будем использовать объект $ post для получения «post_ID». Этот шаг на самом деле очень прост, потому что мы не собираем никаких сложных данных; комментарии в коде предоставляют подробные пошаговые инструкции в этом процессе.
function ppbv_page_viewed () { if (is_single () &&! is_page ()) {// запускается только на сообщениях, а не на страницах глобальный $ wpdb, $ post, $ ppbv_tablename; // вызываем global для использования в funciton $ Wpdb-> заподлицо (); // очищаем интерфейс БД $ data = $ wpdb-> get_row ("SELECT * FROM {$ ppbv_tablename} WHERE post_id = '{$ post-> ID}'", ARRAY_A); // получаем строку данных с соответствующим идентификатором поста if (! is_null ($ data)) {// если у нас есть соответствующая строка данных $ new_views = $ data ['views'] + 1; // увеличить количество просмотров на 1 $ wpdb-> query ("UPDATE {$ ppbv_tablename} SET views = '{$ new_views}' WHERE post_id = '{$ post-> ID}';"); // обновляем строку данных новыми представлениями $ Wpdb-> заподлицо (); // очищаем интерфейс БД } else {// если у нас нет подходящей строки данных (никто еще не просмотрел сообщение) $ wpdb-> query ("INSERT INTO {$ ppbv_tablename} (post_id, views) VALUES ('{$ post-> ID}', '1');"); // добавляем новую строку данных в БД с идентификатором поста и 1 просмотром $ Wpdb-> заподлицо (); // очищаем интерфейс БД } } } add_action ( 'wp_head', 'ppbv_page_viewed'); // присоединяем ppbv_page_viewed к хуку wp_head
Шаг 3. Создание Admin Widget
Далее, мы собираемся использовать эти данные, которые мы только что добавили в нашу базу данных, чтобы создать упорядоченный список внутри виджета панели администратора. Этот процесс включает две функции: первая ( ppbv_admin_widget ) для генерации всего внутри виджета и вторая ( ppbv_add_admin_widget ) для создания самого виджета. Давайте начнем с функции содержимого, pppbv_admin_widget. Во-первых, поскольку мы создаем упорядоченный список, давайте повторим открывающие теги для этого. Затем мы глобализируем переменные $ wpdb и $ ppbv_tablename, чтобы мы могли получить доступ к базе данных и получить десять самых просматриваемых идентификаторов поста. Затем мы будем запускать возвращаемый массив с помощью оператора foreach и использовать каждый отдельный идентификатор для создания элемента списка и создания ссылки на эту страницу, а также распечатывать ее представления (отформатированные с помощью number_format, чтобы было легче читать).
function ppbv_admin_widget () { echo "<ol id = 'Popular_by_views_admin_list'>"; // создаем неупорядоченный список глобальный $ wpdb, $ ppbv_tablename; // вызываем global для использования в функции $ Popular = $ wpdb-> get_results ("SELECT * FROM {$ ppbv_tablename} ORDER BY просмотров DESC LIMIT 0,10", ARRAY_N); // Упорядочить нашу таблицу по наибольшему или наименьшему количеству просмотров, затем получить первые 10 (то есть 10 самых просматриваемых) foreach ($ Popular as $ Post) {// цикл через возвращенный массив популярных сообщений $ ID = $ post [1]; // сохранить данные в переменной, чтобы сохранить несколько символов и сохранить чистоту кода $ views = number_format ($ post [2]); // number_format добавляет запятые в нужных местах для чисел (например: от 12543 до 12,543) $ post_url = get_permalink ($ ID); // получаем URL текущего сообщения в цикле $ title = get_the_title ($ ID); // получаем заголовок текущего сообщения в цикле echo "<li> <a href='ndom$post_url‹'> {$ title} </a> - {$ views} views </ li>"; // выводим информацию в элемент списка } // конец цикла echo "</ ol>"; // закрываем неупорядоченный список }
Теперь, когда мы генерируем контент, давайте создадим виджет. Внутри функции создания, ppbv_add_admin_widget, мы собираемся вызвать другую функцию, встроенную в WordPress: wp_add_dashboard_widget . Все, что нам нужно сделать, это дать wp_add_dashboard_widget следующие параметры: [идентификатор контейнера], [заголовок в контейнере], [функция содержимого] (наши заполняются так: «Popular_by_views», «Самые популярные сообщения по представлениям», «ppbv_admin_widget» «). Последнее, что нам нужно сделать, это присоединить нашу функцию создания к хуку wp_dashboard_setup.
function ppbv_add_admin_widget () { wp_add_dashboard_widget ('Popular_by_views', 'Самые популярные сообщения по просмотрам', 'ppbv_admin_widget'); // создаем виджет админки || wp_add_dashboard_widget ([идентификатор div], [заголовок в div], [функция для запуска внутри div]) } add_action ( 'wp_dashboard_setup', 'ppbv_add_admin_widget'); // прикрепляем ppbv_add_admin_widget к wp_dashboard_setup
И теперь у нас есть рабочий виджет панели инструментов, который могут видеть администраторы.
Шаг 4. Создание виджета боковой панели
Создание виджета боковой панели довольно безболезненно; к сожалению, некоторые части не документированы (например, как сделать их единообразными), но мы рассмотрим это. Давайте начнем с написания новой функции ( ppbv_display_widget ) и внутри нее мы будем копировать нашу функцию содержимого из виджета администратора (я предлагаю переместить глобальные вызовы наверх, за пределы <ol> echo, функции для ясность позже). Затем следующим шагом будет регистрация нашего виджета в WordPress через wp_register_sidebar_widget (параметры: [идентификатор контейнера], [заголовок на странице виджета], [функция содержимого] || ‘Popular_by_views’, ‘Самые популярные сообщения по просмотрам’, ‘ppbv_display_widget’).
function ppbv_display_widget () { глобальный $ wpdb, $ ppbv_tablename; // вызываем global для использования в функции echo "<div id = 'Popular_by_views'>"; // создаем контейнер echo "<h2> Самые популярные по просмотрам </ h2>"; // пишем заголовок echo "<ol id = 'Popular_by_views_list'>"; // создать упорядоченный список $ Popular = $ wpdb-> get_results ("SELECT * FROM {$ ppbv_tablename} ORDER BY просмотров DESC LIMIT 0,10", ARRAY_N); foreach ($ Popular as $ Post) {// цикл через возвращенный массив популярных сообщений $ ID = $ post [1]; // сохранить данные в переменной, чтобы сохранить несколько символов и сохранить чистоту кода $ views = number_format ($ post [2]); // number_format добавляет запятые в нужных местах для чисел (например: от 12543 до 12,543) $ post_url = get_permalink ($ ID); // получаем URL текущего сообщения в цикле $ title = get_the_title ($ ID); // получаем заголовок текущего сообщения в цикле echo "<li> <a href='ndom$post_url‹'> {$ title} </a> - {$ views} views </ li>"; // выводим информацию в элемент списка } // конец цикла echo "</ ol>"; // закрываем упорядоченный список echo "</ div>"; // закрываем контейнер } wp_register_sidebar_widget ('Popular_by_views', 'Самые популярные сообщения по просмотрам', 'ppbv_display_widget'); // добавляем виджет в меню выбора || wp_register_sidebar_widget ([идентификатор опции], [название опции], [функция, запускаемая из виджета]))
Это фактически необходимый минимум для виджета боковой панели, но к тому, что 90% всех динамических боковых панелей имеют определенные параметры настройки стиля виджетов, поэтому давайте подстроим наш виджет к этим настройкам. Первое, что нам нужно сделать, это добавить параметр в нашу функцию ppbv_display_widget, $ args . Добавив этот параметр внутрь функции, используя для нее функцию extract , мы получим доступ к нескольким переменным, которые позволят стилизовать наш плагин так же, как остальные виджеты на боковой панели.
«Нам не нужно предоставлять входные данные для $ args, WordPress сделает это за нас».
Благодаря $ args и extract у нас теперь есть доступ к следующим переменным, которые мы можем отобразить для стилизации нашего виджета:
- $ before_widget
- $ after_widget
- $ before_title
- $ after_title
function ppbv_display_widget ($ args) { глобальный $ wpdb, $ ppbv_tablename; // вызываем global для использования в функции экстракт ($ арг); // дает нам настройки виджетов по умолчанию echo $ before_widget; // выводим контейнер для виджета || полученный из $ args echo $ before_title. "Самые популярные по просмотрам". $ after_title; // выводим заголовок виджета || $ before_title / $ after_title, полученный из $ args echo "<ol id = 'Popular_by_views_list'>"; // создать упорядоченный список $ Popular = $ wpdb-> get_results ("SELECT * FROM {$ ppbv_tablename} ORDER BY просмотров DESC LIMIT 0,10", ARRAY_N); // Упорядочить нашу таблицу по наибольшему или наименьшему количеству просмотров, затем получить первые 10 (то есть 10 самых просматриваемых) foreach ($ Popular as $ Post) {// цикл через возвращенный массив популярных сообщений $ ID = $ post [1]; // сохранить данные в переменной, чтобы сохранить несколько символов и сохранить чистоту кода $ views = number_format ($ post [2]); // number_format добавляет запятые в нужных местах для чисел (например: от 12543 до 12,543) $ post_url = get_permalink ($ ID); // получаем URL текущего сообщения в цикле $ title = get_the_title ($ ID); // получаем заголовок текущего сообщения в цикле echo "<li> <a href='ndom$post_url‹'> {$ title} </a> - {$ views} views </ li>"; // выводим информацию в элемент списка } // конец цикла echo "</ ol>"; // закрываем упорядоченный список echo $ after_widget; // закрываем контейнер || полученный из $ args }
Шаг 5. Функция не виджета
Не каждый, кто использует этот плагин, захочет использовать виджет, поэтому крайне важно, чтобы мы предоставили им другой способ отображения нашего списка. К счастью, это так же просто, как клонирование нашей функции ppbv_display_widget и удаление частей виджета, заменяя их стандартным жестко закодированным HTML.
function ppbv_display () { глобальный $ wpdb, $ ppbv_tablename; // вызываем global для использования в функции echo "<div id = 'Popular_by_views'>"; // создаем контейнер echo "<h2> Самые популярные по просмотрам </ h2>"; // пишем заголовок echo "<ol id = 'Popular_by_views_list'>"; // создать упорядоченный список $ Popular = $ wpdb-> get_results ("SELECT * FROM {$ ppbv_tablename} ORDER BY просмотров DESC LIMIT 0,10", ARRAY_N); foreach ($ Popular as $ Post) {// цикл через возвращенный массив популярных сообщений $ ID = $ post [1]; // сохранить данные в переменной, чтобы сохранить несколько символов и сохранить чистоту кода $ views = number_format ($ post [2]); // number_format добавляет запятые в нужных местах для чисел (например: от 12543 до 12,543) $ post_url = get_permalink ($ ID); // получаем URL текущего сообщения в цикле $ title = get_the_title ($ ID); // получаем заголовок текущего сообщения в цикле echo "<li> <a href='ndom$post_url‹'> {$ title} </a> - {$ views} views </ li>"; // выводим информацию в элемент списка } // конец цикла echo "</ ol>"; // закрываем упорядоченный список echo "</ div>"; // закрываем контейнер }
Вывод
Вот и все, вы успешно создали свой собственный плагин WordPress «Самые популярные по просмотрам». Не слишком сложно, не так ли?
Когда вы овладеете искусством разработки плагинов для WordPress, зайдите на CodeCanyon.net и начните продавать свои плагины с прибылью!
Посмотреть окончательный исходный код с комментариями?
<? PHP / ** * Имя плагина: популярные сообщения по просмотрам * Плагин URI: http://net.tutsplus.com * Описание: создайте виджет, чтобы показать ваши самые популярные статьи на основе просмотров. * Версия: 1.0 * Автор URI: http://fire-studios.com * Лицензия: GPL2 * * Этот плагин и сопровождающее его руководство написаны для NETTUTS по адресу http://net.tutsplus.com. * * / глобальный $ wpdb; // вызываем global, чтобы мы могли получить префикс базы данных $ ppbv_tablename = $ wpdb-> prefix.'popular_by_views '; // объединяем префикс с нашим именем таблицы function ppbv_create_table () { глобальный $ wpdb, $ ppbv_tablename; // вызываем global, чтобы мы могли использовать их внутри функции $ ppbv_table = $ wpdb-> get_results ("ПОКАЗАТЬ ТАБЛИЦЫ НРАВИТСЯ '{$ ppbv_tablename}'", ARRAY_N); // возвращает ноль, если нет результатов if (is_null ($ ppbv_table)) {// если у нас нет таблицы $ create_table_sql = "CREATE TABLE {$ ppbv_tablename} ( id BIGINT (50) NOT NULL AUTO_INCREMENT, post_id VARCHAR (255) НЕ NULL, просмотров BIGINT (50) NOT NULL, ПЕРВИЧНЫЙ КЛЮЧ (id), Уникальный идентификатор) ); "; // будьте осторожны с синтаксисом SQL, он может быть ОЧЕНЬ финикий $ Wpdb-> запрос ($ create_table_sql); // запускаем оператор SQL в базе данных $ Wpdb-> заподлицо (); // очищаем интерфейс БД } } register_activation_hook (__ FILE __ 'ppbv_create_table'); // запускаем функцию ppbv_create_table при активации плагина function ppbv_page_viewed () { if (is_single () &&! is_page ()) {// запускается только на сообщениях, а не на страницах глобальный $ wpdb, $ post, $ ppbv_tablename; // вызываем global для использования в funciton $ Wpdb-> заподлицо (); // очищаем интерфейс БД $ data = $ wpdb-> get_row ("SELECT * FROM {$ ppbv_tablename} WHERE post_id = '{$ post-> ID}'", ARRAY_A); // получаем строку данных с соответствующим идентификатором поста if (! is_null ($ data)) {// если у нас есть соответствующая строка данных $ new_views = $ data ['views'] + 1; // увеличить количество просмотров на 1 $ wpdb-> query ("UPDATE {$ ppbv_tablename} SET views = '{$ new_views}' WHERE post_id = '{$ post-> ID}';"); // обновляем строку данных новыми представлениями $ Wpdb-> заподлицо (); // очищаем интерфейс БД } else {// если у нас нет подходящей строки данных (никто еще не просмотрел сообщение) $ wpdb-> query ("INSERT INTO {$ ppbv_tablename} (post_id, views) VALUES ('{$ post-> ID}', '1');"); // добавляем новую строку данных в БД с идентификатором поста и 1 просмотром $ Wpdb-> заподлицо (); // очищаем интерфейс БД } } } add_action ( 'wp_head', 'ppbv_page_viewed'); // присоединяем ppbv_page_viewed к хуку wp_head function ppbv_admin_widget () { echo "<ol id = 'Popular_by_views_admin_list'>"; // создаем неупорядоченный список глобальный $ wpdb, $ ppbv_tablename; // вызываем global для использования в функции $ Popular = $ wpdb-> get_results ("SELECT * FROM {$ ppbv_tablename} ORDER BY просмотров DESC LIMIT 0,10", ARRAY_N); // Упорядочить нашу таблицу по наибольшему или наименьшему количеству просмотров, затем получить первые 10 (то есть 10 самых просматриваемых) foreach ($ Popular as $ Post) {// цикл через возвращенный массив популярных сообщений $ ID = $ post [1]; // сохранить данные в переменной, чтобы сохранить несколько символов и сохранить чистоту кода $ views = number_format ($ post [2]); // number_format добавляет запятые в нужных местах для чисел (например: от 12543 до 12,543) $ post_url = get_permalink ($ ID); // получаем URL текущего сообщения в цикле $ title = get_the_title ($ ID); // получаем заголовок текущего сообщения в цикле echo "<li> <a href='ndom$post_url‹'> {$ title} </a> - {$ views} views </ li>"; // выводим информацию в элемент списка } // конец цикла echo "</ ol>"; // закрываем неупорядоченный список } function ppbv_add_admin_widget () { wp_add_dashboard_widget ('Popular_by_views', 'Самые популярные сообщения по просмотрам', 'ppbv_admin_widget'); // создаем виджет админки || wp_add_dashboard_widget ([идентификатор div], [заголовок в div], [функция для запуска внутри div]) } add_action ( 'wp_dashboard_setup', 'ppbv_add_admin_widget'); // прикрепляем ppbv_add_admin_widget к wp_dashboard_setup function ppbv_display_widget ($ args) { глобальный $ wpdb, $ ppbv_tablename; // вызываем global для использования в функции экстракт ($ арг); // дает нам настройки виджетов по умолчанию echo $ before_widget; // выводим контейнер для виджета || полученный из $ args echo $ before_title. "Самые популярные по просмотрам". $ after_title; // выводим заголовок виджета || $ before_title / $ after_title, полученный из $ args echo "<ol id = 'Popular_by_views_list'>"; // создать упорядоченный список $ Popular = $ wpdb-> get_results ("SELECT * FROM {$ ppbv_tablename} ORDER BY просмотров DESC LIMIT 0,10", ARRAY_N); // Упорядочить нашу таблицу по наибольшему или наименьшему количеству просмотров, затем получить первые 10 (то есть 10 самых просматриваемых) foreach ($ Popular as $ Post) {// цикл через возвращенный массив популярных сообщений $ ID = $ post [1]; // сохранить данные в переменной, чтобы сохранить несколько символов и сохранить чистоту кода $ views = number_format ($ post [2]); // number_format добавляет запятые в нужных местах для чисел (например: от 12543 до 12,543) $ post_url = get_permalink ($ ID); // получаем URL текущего сообщения в цикле $ title = get_the_title ($ ID); // получаем заголовок текущего сообщения в цикле echo "<li> <a href='ndom$post_url‹'> {$ title} </a> - {$ views} views </ li>"; // выводим информацию в элемент списка } // конец цикла echo "</ ol>"; // закрываем упорядоченный список echo $ after_widget; // закрываем контейнер || полученный из $ args } wp_register_sidebar_widget ('Popular_by_views', 'Самые популярные сообщения по просмотрам', 'ppbv_display_widget'); // добавляем виджет в меню выбора || wp_register_sidebar_widget ([идентификатор опции], [название опции], [функция, запускаемая из виджета])) function ppbv_display () { глобальный $ wpdb, $ ppbv_tablename; // вызываем global для использования в функции echo "<div id = 'Popular_by_views'>"; // создаем контейнер echo "<h2> Самые популярные по просмотрам </ h2>"; // пишем заголовок echo "<ol id = 'Popular_by_views_list'>"; // создать упорядоченный список $ Popular = $ wpdb-> get_results ("SELECT * FROM {$ ppbv_tablename} ORDER BY просмотров DESC LIMIT 0,10", ARRAY_N); foreach ($ Popular as $ Post) {// цикл через возвращенный массив популярных сообщений $ ID = $ post [1]; // сохранить данные в переменной, чтобы сохранить несколько символов и сохранить чистоту кода $ views = number_format ($ post [2]); // number_format добавляет запятые в нужных местах для чисел (например: от 12543 до 12,543) $ post_url = get_permalink ($ ID); // получаем URL текущего сообщения в цикле $ title = get_the_title ($ ID); // получаем заголовок текущего сообщения в цикле echo "<li> <a href='ndom$post_url‹'> {$ title} </a> - {$ views} views </ li>"; // выводим информацию в элемент списка } // конец цикла echo "</ ol>"; // закрываем упорядоченный список echo "</ div>"; // закрываем контейнер } ?>