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

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

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

автор

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

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

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

Итак, перед нами стоит задача удалить запись из списка Избранного. Сделать это нужно, как и в случае с добавлением, без перезагрузки страницы, т.е. мы будем использовать AJAX в WordPress.

Вы помните, как легко работать с AJAX в WordPress?

Как вы помните, в файле wfm-favorites-scripts.js есть функция, отправляющая ajax запрос для добавления статьи в Избранное. Благодаря параметру action WordPress понимает, в какую именно функцию отправить запрос ajax. Сейчас этот параметр статичен, т.е. связан с конкретной функцией. Почему бы нам не сделать этот параметр динамичным? Давайте попробуем сделать, тогда одна и та же функция в JS будет иметь возможность отправлять запросы к различным функциям в WordPress.

Для реализации задуманного немного изменим функцию wfm_favorites_content, сделав одинаковую структуру ссылок:

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

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

Узнать подробнее
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"><span class="wfm-favorites-hidden"><img src="' . $img_src . '" alt=""></span><a data-action="del" href="#">Удалить из Избранного</a></p>' . $content;
 }

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

Как видим, к каждой из ссылок мы добавили новый атрибут data-action с различным значением для добавления и удаления избранной статьи: add — для добавления, del — удаления. Теперь получим значение атрибута в JavaScript и используем его при формировании запроса AJAX:

$('.wfm-favorites-link a').click(function(e){
 var action = $(this).data('action'); // получаем значение атрибута
 $.ajax({
  type: 'POST',
  url: wfmFavorites.url, 
  data: {
 security: wfmFavorites.nonce,
 action: 'wfm_' + action, // добавляем значение атрибута
 postId: wfmFavorites.postId
  },
  beforeSend: function(){
 $('.wfm-favorites-link a').fadeOut(300, function(){
 $('.wfm-favorites-hidden').fadeIn();
 });
  },
  success: function(res){
 $('.wfm-favorites-hidden').fadeOut(300, function(){
 $('.wfm-favorites-link').html(res);
 });
  },
  error: function(){
 alert('Ошибка!');
  }
 });
 e.preventDefault();
});

Теперь наш запрос ajax действительно динамичен и может работать уже с двумя различными функциями PHP.

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

add_action( 'wp_ajax_wfm_add', 'wp_ajax_wfm_add' );
add_action( 'wp_ajax_wfm_del', 'wp_ajax_wfm_del' );

Осталось написать функцию, которая будет обрабатывать запрос ajax и удалять избранную статью:

function wp_ajax_wfm_del(){
 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( delete_user_meta( $user->ID, 'wfm_favorites', $post_id ) ){
  wp_die('Удалено');
 }

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

Если все сделано верно, то теперь наш плагин WordPress Избранные записи обзавелся новым функционалом — теперь мы можем удалять из пользовательских метаданных избранные статьи.

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

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

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

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

Получить

Метки: ,

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

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

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

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

  1. Людмила

    Здравствуйте.

    Очень полезный плагин у вас получился.
    Только я не нашла продолжения, как вывести список избранных постов?

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

      Здравствуйте, Людмила.
      Скоро выйдет очередной урок, в котором будет показан вывод Избранного в виджете консоли. Лучше подписаться дополнительно на наш канал YouTube, там уроки выкладываются недели на 2-3 раньше.

  2. Людмила

    Спасибо, подписалась.

    Жду продолжение, надеюсь оно не задержится — очень нужен ваш плагин :) .

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

      Следующий урок на канале появится скорее всего в конце недели, дождитесь :)

  3. Людмила

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

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

      Не сложно) Сделать это можно, зарегистрировав в плагине собственный виджет. После того, как создадим основную часть плагина, уделю время на виджет и покажу.

      • Людмила

        Скажите. а можно вывести список записей не виджетом, а функцией?

        Зачем лишний код в плагине?

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

          Виджет нужен для того, чтобы администратор мог вывести его в любом месте своей темы. Без виджета так сделать не получится.

          • Людмила

            Я не администратор, я владелец сайта — и всегда удобнее вставить функцию в файл, опять таки, в любом месте, чем использовать костыли в виде виджета.

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

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

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

Ваш 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