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

Ромчик
0

Создание плагина для WordPressДоброго времени суток. Мы продолжаем создавать плагин для WordPress. А точнее плагин мы уже создали. Так в статье “Создание плагина для WordPress. Часть 5” мы создали сам плагин. А в статье “Создание плагина для WordPress. Часть 7” мы создали виджет, который отображает заголовки самых популярных статей из нашего плагина. Теперь мы остановимся на создании некоторых параметров, которые можно изменять из админки. Например, я хочу изменять заголовок виджета популярных статей из админки, так же я хочу из админки включать или отключать показ количества просмотров популярных статей. Хочу изменять количество отображаемых статей в нашем плагине. И все это мы реализуем дальше.

Ну, что приступим.

Заголовок плагина

Откроем файл с созданным нами плагином для WordPress popular_post_1.php
За отображение формы в админке отвечает функция form, которой мы должны передать параметр $instance. Добавим в эту функцию, следующий код:

<p>
    <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e("Введите заголовок виджета"); ?></label>:
    <input type="text"name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $instance['title']; ?>">
</p>

где:

  1. get_field_id(‘title’) — функция генерирует уникальный ID для данного параметра
  2. get_field_name(‘title’) —  эта функция служит для уникальной идентификации полей формы, функция используется для маркировки полей формы в виде конфигурации виджета.
  3. $instance[‘title’] — берет значение поля title из конфигурации плагина.

Сохраните файл. Теперь перейдите в админку Вашего сайта и откройте Внешний вид -> Виджеты. И раскройте наш виджет popularposts

Плагин популярные статьиИ мы видим, что у нас для созданного нами плагина появилась форма, в которой есть строка ввода для заголовка и кнопка сохранить

Настройка плагинаТеперь нам надо чтобы наши настройки для плагина сохранились. Для этого используется функция update, в которую передаются два параметра $new_instance, $old_instance — новые и старые настройки соответственно.
Добавьте к этой функции следующий код:

$instance = $old_instance;
$instance['title'] = strip_tags( $new_instance['title'] );

Тем самым мы перезаписали новое значение конфигурации для поля title. Сохраните и проверьте.
Перейдите в форму настроек нашего виджета, введите заголовок и нажмите “Сохранить”. Обновите окно и перейдите опять в форму настроек нашего виджета, теперь в поле ввода заголовка должен отобразиться только, что введенный заголовок. Это происходит благодаря тому, что мы нашему input в value пометили значение $instance[‘title’].
Теперь нам необходимо, чтобы этот заголовок отобразился на самом сайте в нашем виджете. Ну, это совсем просто. Как Вы помните за отображение виджета на сайте отвечает функция widget. Ищем в ней следующий код:

if ( $title )
            echo $before_title . $title . $after_title;

И заменяем его на:

echo $before_title . $instance['title'] . $after_title;

Проверяем его. Переходим на наш сайт и вуаля: мы видим наш заголовок.

Включение и отключение показа количества просмотров

Тут я уже подробно останавливаться не буду. Переходим в файле созданного нами плагина к функции form и добавляем следующий код:

<p>
    <label for=""><?php _e("Отображать количество просмотров?");?></label>
    <?php if($instance['views']=="on"):?>
        <input type="checkbox" name="<?php echo $this->get_field_name('views'); ?>" checked>
    <?php else: ?>
        <input type="checkbox" name="<?php echo $this->get_field_name('views'); ?>">
    <?php endif;?>
</p>

Дальше переходим к функции update для сохранения наших настроек и добавляем к ней следующий код:

$instance['views'] = strip_tags( $new_instance['views'] );

И теперь переходим к функции отображения нашего виджета 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;

И заменяем его на:

if ($instance['views']=="on"):
            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 "<li><a href=".$post_title->guid.">".$post_title->post_title."</a> (".$c->count.")</li>";
                endforeach;
            endforeach;
        else:
            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 "<li><a href=".$post_title->guid.">".$post_title->post_title."</a></li>";
                endforeach;
            endforeach;
        endif;

Сохраняем и проверяем.

Количество отображаемых статей

Теперь реализуем в создаваемом нами плагине настройку количества выводимых постов. Для этого в файле popular_post_1.php в функцию form добавим следующий код:

<p>
    <label for=""><?php _e("Введите колличество отображаемых постов.");?></label>
    <select name="<?php echo $this->get_field_name('count');?>">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="5">5</option>
    </select>
</p>

Для сохранения настроек в функцию update добавим код:

$instance['count'] = strip_tags( $new_instance['count'] );

Ну и для отображения в функции widget код:

$result = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}popularposts ORDER BY count DESC");

меняем на:

$count = $instance['count'];
$result = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}popularposts ORDER BY count DESC limit $count");

Вот и все.
Вот так должен выглядеть код созданного нами плагина:

<?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 );
        //вытягиваем посты
        global $wpdb;
        $count = $instance['count'];
    $result = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}popularposts ORDER BY count DESC limit $count");
        echo $before_widget;
        echo $before_title . $instance['title'] . $after_title;
        echo "<ul>";
        if ($instance['views']=="on"):
            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 "<li><a href=".$post_title->guid.">".$post_title->post_title."</a> (".$c->count.")</li>";
                endforeach;
            endforeach;
        else:
            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 "<li><a href=".$post_title->guid.">".$post_title->post_title."</a></li>";
                endforeach;
            endforeach;
        endif;
        echo "</ul>";
        echo $after_widget;
}
//admin
function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        $instance['title'] = strip_tags( $new_instance['title'] );
            $instance['views'] = strip_tags( $new_instance['views'] );
            $instance['count'] = strip_tags( $new_instance['count'] );
            return $instance;
    }
function form($instance) {?>
        <p>
                    <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e("Введите заголовок виджета"); ?></label>:
                    <input type="text"name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $instance['title']; ?>">
                </p>
                <p>
                    <label for=""><?php _e("Отображать количество просмотров?");?></label>
                    <?php if($instance['views']=="on"):?>
                        <input type="checkbox" name="<?php echo $this->get_field_name('views'); ?>" checked>
                    <?php else: ?>
                        <input type="checkbox" name="<?php echo $this->get_field_name('views'); ?>">
                    <?php endif;?>
                </p>
                <p>
                    <label for=""><?php _e("Введите колличество отображаемых постов.");?></label>
                    <select name="<?php echo $this->get_field_name('count');?>">
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="5">5</option>
                    </select>

                </p>
<?php }
}

?>

Функция для отображения нашего плагина немного отличается от кода в предыдущих статьях.  Я немного подправил отображение нашего виджета и подвел его под стандарт WordPress.
А на этом все. Теперь Вы можете спокойно приступить к созданию собственных плагинов для WordPress.

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

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

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