Rechercher

Affichage et MAJ d’un élément en AJAX

Placeholder image

Dans le JS l’action doit renvoyer vers la fonction qu’on active.

document.addEventListener("DOMContentLoaded", function () {
    if (typeof mnky_ajax === "undefined") {
        console.error("Erreur: mnky_ajax n'est pas défini !");
        return;
    }
    // Utilisation de event delegation pour s'assurer que l'événement est attaché une seule fois
    document.body.addEventListener("click", function (event) {
        if (event.target && event.target.matches(".mnky-like-btn")) {
            let postId = event.target.getAttribute("data-post-id");

            fetch(mnky_ajax.ajax_url, {
                method: "POST",
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded",
                },
                body: new URLSearchParams({
                    action: "increment_like",
                    post_id: postId,
                }),
            })
            .then(response => response.json())  // Convertir la réponse en JSON
            .then(data => {

                if (data.success && data.data && data.data.new_count !== undefined) {
                    event.target.querySelector('span').innerHTML = `${data.data.new_count}`;
                }
            })
            .catch(error => console.error("Erreur AJAX:", error));
        }
    });
});
function mnky_increment_like() {
    if (!isset($_POST['post_id'])) {
        wp_send_json_error(['message' => 'Post ID manquant']);
        wp_die();
    }

    $post_id = intval($_POST['post_id']);

    // Vérifier si la méta existe déjà
    $current_likes = get_post_meta($post_id, 'mnky_post_views_like', true);
    if (!$current_likes || !is_numeric($current_likes)) {
        $current_likes = 0; // Si la méta n'existe pas, initialiser à 0
    }

    // Incrémenter
    $new_likes = $current_likes + 1;

    // Mettre à jour la base de données
    update_post_meta($post_id, 'mnky_post_views_like', $new_likes);

    // Retourner la réponse au format JSON
    $response = ['success' => true, 'new_count' => $new_likes];
    wp_send_json_success($response);

    wp_die();
}
add_action('wp_ajax_increment_like', 'mnky_increment_like');
add_action('wp_ajax_nopriv_increment_like', 'mnky_increment_like');
function mnky_enqueue_scripts() {
    // Enregistrer main.js
    wp_register_script('like-js', get_template_directory_uri() . '/js/like.js', ['jquery'], null, true);

    // Injecter mnky_ajax après avoir enregistré le script
    wp_localize_script('like-js', 'mnky_ajax', [
        'ajax_url' => admin_url('admin-ajax.php'),
    ]);

    // Charger main.js après l’injection de mnky_ajax
    wp_enqueue_script('like-js');
}
add_action('wp_enqueue_scripts', 'mnky_enqueue_scripts');