Создание плагина для WordPress. Часть 7

Ромчик
0

Создание плагина для WordPressДоброго времени суток. И мы продолжаем создавать свой плагин для WordPress. У нас уже есть плагин, который добавляет в базу данные о количестве просмотров определенной статьи. Но данный плагин не выводит информации о популярных постах. Поэтому нам пришлось вернуться к теории и рассмотреть понятие виджета и правила создания виджета для WordPress. А теперь, когда мы получили знания о виджетах, то можем приступить к его созданию.

Ну, что ж давайте приступим к созданию виджета.

Регистрация виджета.

Первое, что нам необходимо сделать — это то, чтобы WordPress увидел наш виджет.
Открываем наш файл плагина popular_post_1.php  и после кода активации плагина добавляем следующий код:

function register_my_widget(){
register_widget( 'Widget_Popularposts' );
}
add_action( 'widgets_init', 'register_my_widget' );

Что мы сделали?

  1. Создали функцию register_my_widget(), в которой вызвали функцию регистрации виджета register_widget(‘Widget_Popularposts’), где в качестве параметра передается название класса самого виджета.
  2. Используем хук 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: https://web-programming.com.ua
Description: Показ популярных постов по количеству просмотров.
Version: 1.0
Author: Nikolaenkov Roman
Author URI: https://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 в то место где хотим его видеть.
Переходим на сайт и видим отображение популярных постов.
На этом данную статью я заканчиваю.
А в следующей статье мы добавим настройки для нашего плагина, например, чтобы из админки могли задать заголовок для вывода популярных постов, чтобы мы из админки могли указать количество выводимых постов и отображать или нет количество просмотров для популярных постов. Так, что следите за обновлениями на моем блоге.

Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger

©2012-2017 По всем вопросам обращайтесь через форму обратной связи

Яндекс.Метрика