Создание плагина для WordPress Избранные записи. Урок 6

Создание плагина для WordPress Избранные записи

От автора: в этом уроке мы продолжим создание плагина для WordPress Избранные записи. В частности, мы реализуем сохранение выбранных пользователем статей в список его Избранного. Из урока Вы узнаете, как получить данные об авторизованном пользователе, где хранятся метаданные пользователя, а также, как добавить что-либо к метаданными пользователя.

автор

Автор: Андрей Кудлай

Зовут меня Андрей Кудлай. Родом я из Украины, живу в Днепропетровске. Веб-программированию учился сам. Неплохо знаю HTML, CSS, PHP, JavaScript.

скачать исходникискачать урок

Итак, начнем мы с получения данных авторизованного пользователя, для которого нам нужен его ID. Сделать это позволяет функция wp_get_current_user(). Получим данные пользователя в нашей функции wp_ajax_wfm_test() сразу после получения ID статьи:

$post_id = (int)$_POST['postId'];
$user = wp_get_current_user();

Теперь сохраним выбранную пользователем статью, это можно сделать функцией add_user_meta():

if( add_user_meta( $user->ID, 'wfm_favorites', $post_id ) ){
 wp_die('Добавлено');
}

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

Хотите быстро научиться создавать сайты и блоги на WordPress с уникальным дизайном?

Получите самую полную в Рунете бесплатную систему обучения создания сайтов на WordPress

Узнать подробнее
function wfm_is_favorites($post_id){
 $user = wp_get_current_user();
 $favorites = get_user_meta( $user->ID, 'wfm_favorites' );
 foreach($favorites as $favorite){
  if($favorite == $post_id) return true;
 }
 return false;
}

Итак, функция wfm_is_favorites() возвращает true, если статья уже запомнена, или false, если статьи нет в Избранном. Немного изменим функцию wp_ajax_wfm_test(), добавив проверку новой функцией wfm_is_favorites(). Итоговый вид функции wp_ajax_wfm_test() будет таким:

function wp_ajax_wfm_test(){
 if( !wp_verify_nonce( $_POST['security'], 'wfm-favorites' ) ){
  wp_die('Ошибка безопасности!');
 }
 $post_id = (int)$_POST['postId'];
 $user = wp_get_current_user();

 if( wfm_is_favorites($post_id) ) wp_die();

 if( add_user_meta( $user->ID, 'wfm_favorites', $post_id ) ){
  wp_die('Добавлено');
 }

 wp_die('Ошибка добавления');
}

Последний штрих в текущем уроке: проверим, нет ли статьи в списке Избранного пользователя и в зависимости от результата будем выводить или ссылку Добавить в Избранное, или ссылку Удалить из Избранного. Для этого немного допишем функцию wfm_favorites_content(). Вот ее итоговый код:

function wfm_favorites_content($content){
 if( !is_single() || !is_user_logged_in() ) return $content;
 $img_src = plugins_url( '/img/loader.gif', __FILE__ );

 global $post;
 if( wfm_is_favorites($post->ID) ){
  return '<p class="wfm-favorites-link"><a href="#">Удалить из Избранного</a></p>' . $content;
 }

 return '<p class="wfm-favorites-link"><span class="wfm-favorites-hidden"><img src="' . $img_src . '" alt=""></span><a href="#">Добавить в Избранное</a></p>' . $content;
}

На этом текущий урок завершен. Удачи и до новых встреч!

Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Хотите быстро научиться создавать сайты и блоги на WordPress с уникальным дизайном?

Получите самую полную в Рунете бесплатную систему обучения создания сайтов на WordPress “Уникальный сайт с нуля”

Получить

Метки: ,

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (2)

  1. Леонид

    Много вопросов возникает в процессе написания серьезных плагинов) Например, что касается метаданных пользователя и соответствующей таблицы в БД — какова верояность того, что при обновлении WP может затронуться эта таблица ?

    • Андрей Кудлай

      Никакой. WP не трогает данные в этой таблице, поэтому за них можно не опасаться.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree