Создание плагина “Популярные статьи” Часть 2

Ромчик
1

Создание плагина для WordPressДоброго времени суток. Мы с Вами продолжаем изучать создание плагина для WordPress. Так в прошлой статье “Создание плагина “Популярные статьи””  мы рассмотрели первый способ реализации данного функционала. Правда плагин мы еще не начали создавать. А в этой статье мы остановимся на втором способе реализации вывода популярных статей. И изучим основные принципы работы с базой данных WordPress используя класс wpdb.

И так первый способ, который мы рассмотрели в первой части создания плагина имеет как плюсы, так и минусы. Основной минус это использования стандартной таблицы postmeta. При деактивации и удалении нашего плагина придется вычищать эту таблицу (могут возникнуть проблемы). Второй минус: мы переопределяли цикл The Loop, что не рекомендуется делать. И если есть другой способ реализации функционала, то лучше использовать его, а не переопределять The Loop.
Второй способ вывода популярных постов заключается в использовании собственной таблицы. Давайте создадим ее. Для создания таблицы Вы можете использовать консоль или любой MySQL клиент. Я воспользуюсь phpMyAdmin. Кто не знает, что это за клиент и как им пользоваться я рекомендую прочитать статью “Основы работы с phpMyAdmin” и “Настройка phpMyAdmin”.

Создание таблицы в базе данных.

Создаем таблицу <префикс>_popularposts , где <префикс> — это префикс таблиц в Вашей базе данных. У меня префикс wp, значит я создаю таблицу wp_popularposts c тремя колонками: id, post_id — сюда мы будем помещать id постов и count — сюда мы будем помещать количество просмотров поста. Теперь перейдем к программированию нашего функционала. И первое, что мы напишем функцию, которая будет записывать количество просмотров поста в нашу таблицу wp_popularposts

Функция записи количества просмотров поста

Открываем functions.php нашей темы (текущей) и добавляем следующий код:

<?php
function setViews($postID) {
    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;
        $wpdb->update(
            $table,
            array('count' =>$count),
            array('post_id'=>$postID),
            array('%d'),
            array('%d'));
    endif;
}
?>

Давайте разберем код, который мы написали.

Экземпляр класса wpdb

В WordPress есть специальный класс для работы с базой данных wpdb. Обращаться к данному классу надо через  $wpdb. Для того, чтобы в нашей функции мы могли использовать экземпляр класса wpdb, нам необходимо обьявить global $wpdb, что мы и сделали.

Определение префикса таблиц в базе данных

Т.к. при установке плагина мы не знаем какой префикс выбрал администратор при установке WordPress, то обращаться к таблице wp_popularposts (для моего случая) неправильно. Потому что префикс wp_ может меняться. Для того, чтобы избежать данной ситуации, давайте определим какой установлен префикс. У класса wpdb есть свойство prefix, которое определяет установленный префикс. Таким образом строкой:

$table = $wpdb->prefix.”popularposts”;

Мы задали название нашей таблицы с префиксом.

get_results — получение данных из таблицы

Следующим шагом нам необходимо проверить есть ли запись в нашей таблице по текущему посту. Для получения результата мы используем метод get_result класса wpdb.
$wpdb->get_results(‘query’, output_type), где:

  1. query — это запрос
  2. output_type — вид результата, по умолчанию результат возвращается в виде обьекта, также результат мы можем получить в виде OBJECT — как численно индексированный массив строк объектов, OBJECT_K — как ассоциативный массив строк объектов, ARRAY_A — как численно индексированный массив ассоциативных массивов, ARRAY_N — как численно индексированный массив массивы с числовыми индексами.

И так, с помощью get_results(«SELECT * FROM $table WHERE post_id = $postID») мы получаем счетчик просмотров данного поста. Дальше осуществляем проверку на существование данного счетчика. Если записи счетчика просмотров для текущего поста нет, то мы создаем новую запись в нашей таблице с помощью метода insert класса wpdb.

insert — добавление записи в таблицу

Для добавления записи в таблицу в WordPress используется метод insert класса wpdb:
$wpdb->insert( $table, $data, $format ), где:

  1. $table — название таблицы, куда мы вставляем запись
  2. $data — данные, которые мы вставляем, записываются в виде массива array (‘название колонки’ =>’значение’, )
  3. $format — формат вставляемых данных, в виде массива, может принимать следующие значения %s — строка, %d — целое число, %f — число с плавающей точкой.

С помощь, insert мы создали запись для текущего поста со счетчиком просмотров равным 1, если счетчик для текущего поста еще не был создан. Если же счетчик просмотров существует, то нам необходимо его увеличить на единицу. Для обновления записи в таблицы мы используем метод update класса wpdb.

update — обновление записи в таблице

Для изменения или обновления записи в таблице в WordPress используется метод update класса wpdb.
$wpdb->update( $table, $data, $where, $format = null, $where_format = null ), где:

  1. $table — название таблицы в которой мы хотим изменить данные.
  2. $data — данные, которые мы обновляем, записываются в виде массива array (‘название колонки’ =>’значение’, )
  3. $where — условие выборки для изменения данных, записываются в виде массива array (‘название колонки’ =>’значение’, ). Если условий несколько, то они будут обьеденены AND.
  4. $format — формат изменяемых данных, в виде массива, может принимать следующие значения %s — строка, %d — целое число, %f — число с плавающей точкой.
  5. $where_format — формат данных в условии, в виде массива, может принимать следующие значения %s — строка, %d — целое число, %f — число с плавающей точкой.

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

<?php
setViews(get_the_ID());
?>

в файл single.php.
Осталось теперь вывести популярные статьи. Выводить мы будем в sidebar. Откроем sidebar.php текущей темы и добавим в него следующий код.

 <?php
$table = $wpdb->prefix.'popularposts';
$result = $wpdb->get_results("SELECT * FROM $table ORDER BY `count` DESC limit 5");
?>
<h3>Популярные статьи</h3>
<ul>
<?php foreach ($result as $c): ?>
<li>
<a href="<?php echo get_permalink($c->post_id);?>"><?php echo get_the_title($c->post_id);?></a>
 </li>
<?php endforeach; ?>
</ul>

Давайте подробно рассмотрим данный код. Строки:
$table = $wpdb->prefix.’popularposts’;
$result = $wpdb->get_results(«SELECT * FROM $table ORDER BY `count` DESC limit 5»);
объяснять не буду, аналогичный код мы рассмотрели выше. После того, как мы получили результат запроса, нам нужно узнать ссылку на пост и название поста по id поста. Для того, чтобы узнать ссылку на пост по заданному id в WordPress используется функция get_permalink

Функция get_permalink

Функция get_permalink($id) используется для получения ссылки на пост с id равным $id.

Функция get_the_title

Для того, чтобы получить заголовок поста по заданному id используется функция get_the_title($id), где $id — это id поста.

Проверим, что у нас получилось. Как видите мы реализовали вывод популярных постов другим способом, используя отдельную таблицу. С главной задачей данной статьи мы справились — познакомились с основами работы с базой данных в WordPress через класс wpdb.
В следующих статьях мы остановимся на таких понятиях как action и filter, познакомимся со структурой плагина и затем приступим к написанию плагина. Так, что не пропускайте выхода новых постов, подписавшись на мой блог.
Всем удачной разработки.

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

  • Dmitriy - 20.09.2017 в 13:58

    Выдаёт мильйон ошибок

    Fatal error: Cannot redeclare setViews() (previously declared in C:\WebServers\home\localhost\www\wordpress\www\wp-content\themes\mantra\functions.php:27) in C:\WebServers\home\localhost\www\wordpress\www\wp-content\themes\mantra\functions.php on line 62

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

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