Создание плагина для WordPress. Часть 7
Доброго времени суток. И мы продолжаем создавать свой плагин для WordPress. У нас уже есть плагин, который добавляет в базу данные о количестве просмотров определенной статьи. Но данный плагин не выводит информации о популярных постах. Поэтому нам пришлось вернуться к теории и рассмотреть понятие виджета и правила создания виджета для WordPress. А теперь, когда мы получили знания о виджетах, то можем приступить к его созданию.
Ну, что ж давайте приступим к созданию виджета.
Регистрация виджета.
Первое, что нам необходимо сделать — это то, чтобы WordPress увидел наш виджет.
Открываем наш файл плагина popular_post_1.php и после кода активации плагина добавляем следующий код:
function register_my_widget(){ register_widget( 'Widget_Popularposts' ); } add_action( 'widgets_init', 'register_my_widget' );
Что мы сделали?
- Создали функцию register_my_widget(), в которой вызвали функцию регистрации виджета register_widget(‘Widget_Popularposts’), где в качестве параметра передается название класса самого виджета.
- Используем хук widgets-init, который вызывается при инициализации виджетов.
Следующим шагом реализуем функционал вывода нашего виджета.
Создание виджета.
Добавляем в наш файл с плагином popular_post_1.php следующий код:
class Widget_Popularposts extends WP_Widget { function Widget_Popularposts() { $widget_ops = array( 'classname' => 'popularpost', 'description' => __('Виджет вывода популярных постов ', 'example') ); $control_ops = array( 'width' => 300, 'height' => 350, 'id_base' => 'popularposts-widget' ); $this->WP_Widget( 'popularposts-widget', __('popularposts', 'popularposts'), $widget_ops, $control_ops ); } function widget( $args, $instance ){ extract( $args ); $title = "Популярные посты"; // Выводим название виджета if ( $title ) echo $before_title . $title . $after_title; //вытягиваем посты global $wpdb; $result = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}popularposts ORDER BY count DESC"); echo $before_widget; foreach ($result as $c): $posts_title = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE ID = $c->post_id"); foreach ($posts_title as $post_title): echo "<a href=".$post_title->guid.">".$post_title->post_title."</a> (".$c->count.")<br><br>"; endforeach; endforeach; echo $after_widget; } }
Что мы сделали?
Первое это создали класс Widget_Popularposts, который является потомком стандартного класса WP_Widget.
Обратите внимание, что название класса должно быть такое же как и в параметре функции register_widget при регистрации нашего виджета.
Дальше в этом классе мы обьявили функцию Widget_Popularposts(), в которой мы определил название css-класса — classname, описание виджета — description. Указали высоту и ширину виджета — width и height. Указали индентификатор в базе данных — id_base.
В функции widget мы получаем данные. Первый параметр $args — это параметры получаемые из темы, а второй параметр — это параметры уже нашего виджета. Дальше мы получаем получаем из базы данных пять самых просматриваемых постов и выводим их.
Вот и все как видите ничего сложного нет.
Cозданный нами плагин для WordPress должен иметь следующий код:
<?php /* Plugin Name: Popular Post Plugin URI: http://web-programming.com.ua Description: Показ популярных постов по количеству просмотров. Version: 1.0 Author: Nikolaenkov Roman Author URI: http://web-programming.com.ua */ //Активация плагина function install(){ global $wpdb; $wpdb->query("CREATE TABLE `".$wpdb->prefix."popularposts` ( `ID` INT(10) UNSIGNED NULL AUTO_INCREMENT, `count` INT DEFAULT '0', `post_id` INT, PRIMARY KEY (`ID`))"); } register_activation_hook( __FILE__, 'install'); //регистрация плагина function register_my_widget(){ register_widget( 'Widget_Popularposts' ); } add_action( 'widgets_init', 'register_my_widget' ); //Деактивация плагина function deactivate(){ global $wpdb; $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}popularposts"); } register_deactivation_hook( __FILE__, 'deactivate'); // Установка и добавление счетчика просмотров function setViews() { if (is_single()) : $postID = get_the_ID(); global $wpdb; $table = $wpdb->prefix."popularposts"; $result = $wpdb->get_results("SELECT * FROM $table WHERE post_id = $postID"); foreach ($result as $c): $count = $c->count; endforeach; if (!isset($count)) : $count = 1; $wpdb->insert($table, array('post_id'=>$postID,'count'=>$count), array('%d','%d') ); else: $count = $count+1; print_r($count); $wpdb->update( $table, array('count' =>$count), array('post_id'=>$postID), array('%d'), array('%d')); endif; endif; } add_action('the_post','setViews'); //Виджет class Widget_Popularposts extends WP_Widget { function Widget_Popularposts() { $widget_ops = array( 'classname' => 'popularpost', 'description' => __('Виджет вывода популярных постов ', 'example') ); $control_ops = array( 'width' => 300, 'height' => 350, 'id_base' => 'popularposts-widget' ); $this->WP_Widget( 'popularposts-widget', __('popularposts', 'popularposts'), $widget_ops, $control_ops ); } function widget( $args, $instance ){ extract( $args ); $title = "Популярные посты"; // Выводим название виджета if ( $title ) echo $before_title . $title . $after_title; //вытягиваем посты global $wpdb; $result = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}popularposts ORDER BY count DESC"); echo $before_widget; foreach ($result as $c): $posts_title = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE ID = $c->post_id"); foreach ($posts_title as $post_title): echo "<a href=".$post_title->guid.">".$post_title->post_title."</a> (".$c->count.")<br><br>"; endforeach; endforeach; echo $after_widget; } } ?>
Проверяем.
Переходим в плагины и активируем наш плагин. Затем переходим в Внешний вид -> Виджеты. И перетягиваем наш виджет popularpost в то место где хотим его видеть.
Переходим на сайт и видим отображение популярных постов.
На этом данную статью я заканчиваю.
А в следующей статье мы добавим настройки для нашего плагина, например, чтобы из админки могли задать заголовок для вывода популярных постов, чтобы мы из админки могли указать количество выводимых постов и отображать или нет количество просмотров для популярных постов. Так, что следите за обновлениями на моем блоге.
Fatal error: Cannot redeclare setViews() (previously declared in C:\WebServers\home\localhost\www\wordpress\www\wp-content\plugins\popular_post_1\popular_post_1.php:37) in C:\WebServers\home\localhost\www\wordpress\www\wp-content\themes\mantra\functions.php on line 38