Пытаюсь без сторонних плагинов сделать лайки. Так чтобы нажал один раз - "+1" лайк, нажал второй раз - "-1" лайк. Естественно хранить данные о лайкнутых постах. Получилось так:
Код кнопки: Передаю ID поста. Сами лайки вывожу из произвольного поля "get_post_meta".
<span class="like__btn" data-id="<?php echo $postId ?>" aria-hidden="true"</span>
На стороне клиента обрабатываю клик, получаю ID поста и передаю на сервер. В ответе получаю количество лайков и подставляю в HTML разметку.
$(".like__btn").click(function(){
var btn = $(this);
var id = btn.attr("data-id");
var data = {
action: 'post__like',
id: id
};
$.ajax({
url: theme_ajax.url,
type: "POST",
data: data,
success: function(data) {
btn.text(data);
},
});
return false;
});
На стороне сервера обрабатываю функцией запрос. Сохраняю ID лайкнутых постов в объект и записываю в COOKIE в формате JSON. Заканчиваю функцией "exit" с новым значением кол-ва лайков.
## like btn
add_action('wp_ajax_nopriv_post__like', 'post__like');
add_action('wp_ajax_post__like', 'post__like');
function the_minus($current){
return (string) --$current;
}
function the_plus($current){
return (string) ++$current;
}
function post__like (){
$id = htmlspecialchars($_POST['id']);
$likes = json_decode(html_entity_decode(stripslashes($_COOKIE["like_count"]),ENT_QUOTES,'UTF-8'));
$current = get_post_meta($id, "the_post_likes", 1);
if ( $likes->$id == "1" ) {
$new = the_minus( $current );
$likes->$id="0";
} else {
$new = the_plus( $current );
$likes->$id="1";
}
setcookie("like_count", json_encode($likes), 3*time(), '/', 'centregrani.com');
update_post_meta($id, "the_post_likes", $new);
exit( $new );
}
Код работает. Но не очень эффективно. Так же если быстро кликнуть несколько раз - кол-во добавляемых или отнимаемых лайков больше, чем 1. Может есть более правильное решение, как хранить данные о лайках на стороне клиента?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем доброй ночиПоявилась нужда сделать возможным прикрепить 1 файл к форме заявки woocommerce, чтобы при отправке заявки на почту - этот файл прикреплялся
Код рабочий, просто для себя хочу узнать правильно ли составил условия? Суть кода такая, Сменить значение count на 4, при условии что запись...