Implementar un Sistema de Votación en WordPress

Este snippet de código permite a los desarrolladores de WordPress implementar un sistema de votación simple pero efectivo en sus sitios web. El código utiliza la API de AJAX de WordPress para actualizar dinámicamente el número de votos de un post sin necesidad de recargar la página.

¿Cómo Funciona?

Este snippet consta de dos partes principales:

  1. Funciones PHP: Se encargan de registrar la acción AJAX y de crear un shortcode que puedes insertar en tus posts o páginas para mostrar el botón de votación.
  2. JavaScript: Se encarga de manejar el evento de clic en el botón de votación, enviando una solicitud AJAX al servidor para actualizar el número de votos.

Cuando un usuario hace clic en el botón de votación, el número de votos se actualiza en la base de datos y se muestra el nuevo número en la interfaz.

Pega este código en el functions.php de tu tema hijo o en un nuevo archivo de snippets:

// Registra la acción AJAX para usuarios autenticados y no autenticados
add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');

function my_action_callback() {
    $post_id = $_POST['post_id'];
    $votes = get_post_meta($post_id, 'votes', true) ?: 0;
    update_post_meta($post_id, 'votes', ++$votes);
    echo $votes;
    wp_die(); 
}

// Función para el shortcode
function votacion_shortcode() {
    $post_id = get_the_ID();
    $votes = get_post_meta($post_id, 'votes', true) ?: 0;
    ob_start();
    ?>
    <div class="bloque-votacion">
        <div class="votacion-encabezado">¿Te ha gustado nuestro contenido?</div>
        <button id="votacion" data-val="1">
             ❤️ <span class="votacion-contador"><?php echo $votes; ?></span>
        </button>
    </div>
    <style>
        .votacion-encabezado {
        width: 80%;
        font-size: 18px;
        font-weight: bold;
        text-align: left;
        display: inline-block;
    }
    button#votacion {
        display: inline-block;
        width: 18%;
    }
    .bloque-votacion {
        border: 1px solid #000;
        border-radius: 6px;
        padding: 8px 8px 8px 15px;
        text-align: right;
    }
    </style>
    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", function() {
            var button = document.getElementById("votacion");
            if (button) {
                var post_id = <?php echo $post_id; ?>;
                var cookieName = "voted_" + post_id;

                if (document.cookie.split(';').some((item) => item.trim().startsWith(cookieName + '='))) {
                    button.disabled = true;
                }

                button.addEventListener("click", function() {
                    var xhr = new XMLHttpRequest();
                    xhr.open('POST', '<?php echo admin_url('admin-ajax.php'); ?>', true);
                    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');
                    xhr.onload = function () {
                        if (xhr.status >= 200 && xhr.status < 400) {
                            document.querySelector(".votacion-contador").innerText = xhr.responseText;
                            button.disabled = true;
                            document.cookie = cookieName + "=true; path=/";
                        }
                    };
                    xhr.send('action=my_action&post_id=' + post_id);
                });
            }
        });
    </script>
    <?php
    return ob_get_clean();
}
add_shortcode('votacion', 'votacion_shortcode');

 

Casos de Uso del Snippet

Este snippet es especialmente útil para:

  • Blogs que deseen permitir a sus lectores votar por el contenido.
  • Sitios de revisión de productos donde los usuarios pueden votar por sus productos favoritos.
  • Cualquier tipo de contenido que se beneficie de un sistema de votación para medir la popularidad o la calidad.

Instrucciones de Instalación

  1. Copia todo el snippet de código.
  2. Pega el código en el archivo functions.php de tu tema de WordPress o en un plugin personalizado.
  3. Utiliza el shortcode [votacion] en cualquier post o página donde desees mostrar el botón de votación.

Personalización y Estilos

El snippet incluye estilos CSS básicos para el botón de votación y el bloque que lo contiene. Puedes personalizar estos estilos editando la sección <style> del código.

Consideraciones de Seguridad

Este snippet utiliza una forma básica de prevención de votos múltiples mediante cookies. Sin embargo, este método no es 100% seguro y se puede mejorar según las necesidades del proyecto.

Con este snippet, puedes añadir fácilmente un sistema de votación a tu sitio de WordPress. Es una excelente manera de interactuar con tus usuarios y obtener retroalimentación sobre tu contenido.

¡Más Snippets, Más Opciones!

Al compartir, motivamos a más desarrolladores a contribuir. Ayúdanos a hacer de este directorio un punto de referencia en snippets.

Facebook
Twitter
LinkedIn
Telegram
WhatsApp

¿Necesitas un snippet? Pídenoslo

¿No encuentras el código que necesitas? Pídenoslo y te ayudamos. También puedes publicar tus snippets.

¿Cómo implementar este snippet en la web?

Tienes 2 opciones, una de ellas es mediante plugin y la otra pegando el código en tu web.

1. Añadir snippet con plugin

code-snippets

Code Snippets

Por Code Snippets Pro

  1. Descarga el plugin o búscalo en el repositorio de plugins de Wordpress e instálalo en tu web.
  2. En el menú lateral del Escritorio verás un nuevo enlace (Fragmetos de código). Ves a Fragmentos de código > Añadir nuevo.
  3. Se abrirá una página con un título, bloque de código, descripción y etiquetas, rellena el título con el que quieras guardarlo, ejemplo: Añadir Google Analytics.
  4. En la parte código verás que está activo PHP, ahí pega el código del snippet
  5. La descripción y las etiquetas solo son para tu información y para que luego encuentres más fácil los snippets.
  6. Publicar y activar el snippet.

2. Añadir snippet en el functions.php

Diseño web con WordPress

Accede al archivo functions.php de tu tema o tema hijo, pega el snippet y guarda el archivo.

Lo encontrarás en Apariencia > Editor de archivos de tema, pinchas sobre el enlace  functions.php y pegas el código al final del archivo.

condiciones de uso diseño web

¿Necesitas un snippet?

Cuéntanos que necesitas e intentaremos crear un snippet que lo realice. Si lo conseguimos, lo publicaremos y te avisaremos por correo.

¡Comparte tu snippet!

Si has creado un snippet y quieres compartirlo, envíanoslo y lo publicaremos enlazando tu web debajo de la publicación.

Relacionados:

Enviar contenido a mi correo

Guárdarte el contenido en tu correo para probarlo más tarde.