В этом руководстве мы создадим плагин для WordPress, который позволит авторизованным пользователям ставить лайки постам. Лайки будут храниться в отдельной таблице базы данных, а их количество будет отображаться на сайте. Мы используем AJAX для обработки лайков без перезагрузки страницы.
Что мы будем делать?
- Создадим таблицу в базе данных для хранения лайков.
- Реализуем функционал добавления лайков с использованием AJAX.
- Добавим кнопку лайка в контент поста.
- Обеспечим безопасность и удобство использования.
Шаг 1: Создание структуры плагина
Создайте папку для плагина, например, my-post-likes
, и внутри нее создайте файл my-post-likes.php
. Это будет основной файл плагина.
<?php
/*
Plugin Name: My Post Likes
Description: Плагин для добавления лайков к постам для авторизованных пользователей.
Version: 1.0
Author: Ваше Имя
*/
// Безопасность
if (!defined('ABSPATH')) {
exit;
}
Шаг 2: Создание таблицы в базе данных
При активации плагина создадим таблицу wp_my_post_likes
, где будем хранить post_id
и user_id
.
// Создание таблицы в БД при активации плагина
register_activation_hook(__FILE__, 'my_create_likes_table');
function my_create_likes_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'my_post_likes'; // Используем префикс my
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
post_id bigint(20) NOT NULL,
user_id bigint(20) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY (post_id, user_id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
Шаг 3: Подключение скриптов
Для работы с AJAX подключим JavaScript-файл и передадим в него необходимые данные.
// Подключение скриптов
add_action('wp_enqueue_scripts', 'my_enqueue_likes_scripts');
function my_enqueue_likes_scripts() {
wp_enqueue_script('my-post-likes', plugin_dir_url(__FILE__) . 'my-post-likes.js', array('jquery'), null, true);
wp_localize_script('my-post-likes', 'my_likes_ajax', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('my_likes_nonce')
));
}
Шаг 4: Обработка AJAX-запроса
Добавим обработчик для добавления лайков.
// Обработка AJAX-запроса для добавления лайка
add_action('wp_ajax_my_add_like', 'my_handle_add_like');
function my_handle_add_like() {
if (!is_user_logged_in()) {
wp_send_json_error('Только авторизованные пользователи могут ставить лайки.');
}
check_ajax_referer('my_likes_nonce', 'nonce');
$post_id = intval($_POST['post_id']);
$user_id = get_current_user_id();
if (!$post_id || !$user_id) {
wp_send_json_error('Ошибка данных.');
}
global $wpdb;
$table_name = $wpdb->prefix . 'my_post_likes';
// Проверяем, не ставил ли пользователь уже лайк
$existing_like = $wpdb->get_row($wpdb->prepare(
"SELECT id FROM $table_name WHERE post_id = %d AND user_id = %d",
$post_id, $user_id
));
if ($existing_like) {
wp_send_json_error('Вы уже ставили лайк этому посту.');
}
// Добавляем лайк
$wpdb->insert(
$table_name,
array(
'post_id' => $post_id,
'user_id' => $user_id
),
array('%d', '%d')
);
// Получаем количество лайков
$likes_count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $table_name WHERE post_id = %d",
$post_id
));
wp_send_json_success(array('likes_count' => $likes_count));
}
Шаг 5: Вывод кнопки лайка
Добавим функцию для отображения кнопки лайка и количества лайков.
// Вывод кнопки лайка и количества лайков
function my_display_likes_button($post_id) {
if (!is_user_logged_in()) {
return;
}
global $wpdb;
$table_name = $wpdb->prefix . 'my_post_likes';
$likes_count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $table_name WHERE post_id = %d",
$post_id
));
$user_id = get_current_user_id();
$user_liked = $wpdb->get_row($wpdb->prepare(
"SELECT id FROM $table_name WHERE post_id = %d AND user_id = %d",
$post_id, $user_id
));
$liked_class = $user_liked ? 'liked' : '';
ob_start();
?>
<div class="my-post-likes">
<button class="my-like-button <?php echo $liked_class; ?>" data-post-id="<?php echo $post_id; ?>">
Нравится (<span class="my-likes-count"><?php echo $likes_count; ?></span>)
</button>
</div>
<?php
return ob_get_clean();
}
// Добавляем кнопку лайка в контент поста
add_filter('the_content', 'my_add_likes_button_to_content');
function my_add_likes_button_to_content($content) {
if (is_single() && is_user_logged_in()) {
$content .= my_display_likes_button(get_the_ID());
}
return $content;
}
Шаг 6: JavaScript для обработки кликов
Создайте файл my-post-likes.js
в папке плагина:
jQuery(document).ready(function($) {
$('.my-like-button').on('click', function(e) {
e.preventDefault();
var button = $(this);
var post_id = button.data('post-id');
if (button.hasClass('liked')) {
return;
}
$.ajax({
url: my_likes_ajax.ajax_url,
type: 'POST',
data: {
action: 'my_add_like',
post_id: post_id,
nonce: my_likes_ajax.nonce
},
success: function(response) {
if (response.success) {
button.addClass('liked');
button.find('.my-likes-count').text(response.data.likes_count);
} else {
alert(response.data);
}
},
error: function() {
alert('Ошибка при отправке запроса.');
}
});
});
});
Шаг 7: Активация плагина
- Загрузите папку плагина в директорию
wp-content/plugins/
. - Активируйте плагин в админке WordPress.
Заключение
Теперь на вашем сайте есть функционал лайков для постов. Пользователи могут ставить лайки, а их количество будет отображаться в реальном времени без перезагрузки страницы. Вы можете расширить плагин, добавив возможность снятия лайка, стилизацию кнопки или шорткод для вывода кнопки в любом месте сайта.
Удачи в разработке! 🚀
Добавить комментарий