Створення плагіна WordPress Обрані записи. Урок 7

14

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

Створення плагіна WordPress Обрані записи. Урок 7

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

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

Створення плагіна WordPress Обрані записи. Урок 7Створення плагіна WordPress Обрані записи. Урок 7

Отже, перед нами стоїть завдання видалити запис зі списку Обраного. Зробити це треба, як і у випадку з додаванням, без перезавантаження сторінки, тобто ми будемо використовувати AJAX в WordPress.

Ви пам’ятаєте, як легко працювати з AJAX в WordPress?

Як ви пам’ятаєте, у файлі wfm-favorites-scripts.js є функція, яка відряджає ajax запит для додавання статті в Обране. Завдяки параметру action WordPress розуміє, в яку саме функцію відправити запит ajax. Зараз цей параметр статичним, тобто пов’язаний з конкретною функцією. Чому б нам не зробити цей параметр динамічним? Давайте спробуємо зробити, тоді одна і та ж функція в JS буде мати можливість надсилати запити до різних функцій в WordPress.

Для реалізації задуманого трохи змінимо функцію 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 ‘

Створення плагіна WordPress Обрані записи. Урок 7Видалити з Обраного

‘. $content;
}
return ‘

Створення плагіна WordPress Обрані записи. Урок 7Додати в Обране

‘. $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 Вибрані записи обзавівся новим функціоналом — тепер ми можемо видаляти з власних метаданих вибрані статті.

На цьому поточний урок завершено. Удачі і до нових зустрічей!