Создание плагина для 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('Добавлено');
}

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

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;
}

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

Хотите быстро научиться создавать сайты и блоги на 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