<?php
function theme_enqueue_scripts() {
wp_enqueue_script('frontend-ajax', get_template_directory_uri() . '/js/ajax-filter-posts.js', array('jquery'), null, true);
wp_localize_script('frontend-ajax', 'frontend_ajax_object',
array(
'ajaxurl' => admin_url('admin-ajax.php'),
'ajaxnonce' => wp_create_nonce('ajaxnonce'),
)
);
}
add_action('wp_enqueue_scripts', 'theme_enqueue_scripts');
add_action('wp_ajax_post_user_vote', 'ajax_user_vote_handler');
add_action("wp_ajax_nopriv_post_user_vote", "my_must_login");
function my_must_login() {
echo "You must log in to vote";
die();
}
function calculatefavs($user_id) {
$user_favorites_arr = get_user_meta($user_id, 'user_favorites', true);
$latest_fav_count = $new_favorite_count = $favorite_count = 0;
if (!empty($user_favorites_arr)) {
$favorite_count = count($user_favorites_arr);
foreach ($user_favorites_arr as $user_favorites_arr_single) {
$new_user_fav_arr[] = $user_favorites_arr_single;
}
}
return $new_user_fav_arr;
}
function ajax_user_vote_handler() {
if (isset($_POST['nonce']) && wp_verify_nonce($_POST['nonce'], 'ajaxnonce')) {
$voteid = $_POST['voteid'];
$user_id = get_current_user_id();
$fav_check = 'false';
$user_favorites_arr = calculatefavs($user_id);
$fav_number = get_post_meta($voteid, 'items_favorites', true);
if (is_null($user_favorites_arr)) {
$user_favorites_arr = array();
$fav_item_pos = false;
} else {
if (in_array($voteid, $user_favorites_arr)) {
$fav_number = $fav_number - 1;
} else {
$fav_number = $fav_number + 1;
}
update_post_meta($voteid, 'items_favorites', $fav_number);
if (is_array($user_favorites_arr)) {
$fav_item_pos = array_search($voteid, $user_favorites_arr);
} else {
$fav_item_pos = false;
}
}
if ($fav_item_pos === false) {
$user_favorites_arr[] = $voteid;
update_user_meta($user_id, 'user_favorites', $user_favorites_arr);
if(empty($fav_number)) {
update_post_meta($voteid, 'items_favorites', 1);
}
} else {
if (!empty($user_favorites_arr)) {
unset($user_favorites_arr[$fav_item_pos]);
} else {
$user_favorites_arr = array();
}
update_user_meta($user_id, 'user_favorites', $user_favorites_arr);
}
}
wp_die();
}
?>