Soporte » WordPress Avanzado » Error al modificar functions.php para casilla de aceptación en comentario (RGPD)

  • Resuelto jlcule

    (@qlbras)


    Hola.

    Como todos estos días, estoy adaptando mi web al RGPD y me he encontrado con un problema con los comentarios de los posts. Hay que pedir la aceptación explícita del usuario y no lo consigo.

    En primer lugar probé a introducir en el archivo functions.php de my child theme el código que Fernando Tellado (Ayudawp.com) programó para esta función (casilla de aceptación en comentarios nativos de WordPress). Pues bien, al pegar la primera parte del código la web va bien. Mi archivo functions.php queda tal que:

    /** Aceptación después del formulario de comentarios **/
    add_filter( 'comment_form_field_comment', 'mi_campo_de_privacidad_en_comentarios' );
    function mi_campo_de_privacidad_en_comentarios( $comment_field ) {
        return $comment_field.'<p class="pprivacy"><input type="checkbox" name="privacy" value="privacy-key" class="privacyBox" aria-req="true">&nbsp;&nbsp;Acepto la <a target="blank" href="https://ayudawp.com/muylegal/">política de privacidad</a><p>';
    }
    //validación por javascript
    add_action('wp_footer','validate_privacy_comment_javascript');
    function validate_privacy_comment_javascript(){
        if (is_single() && comments_open()){
            wp_enqueue_script('jquery');
            ?>
            <script type="text/javascript">
            jQuery(document).ready(function($){
                $("#submit").click(function(e)){
                    if (!$('.privacyBox').prop('checked')){
                        e.preventDefault();
                        alert('Debes aceptar nuestra política de privacidad marcando la casilla ....');
                        return false;
                    }
                }
            });
            </script>
            <?php
        }
    }
    
    //sin validación js
    add_filter( 'preprocess_comment', 'verify_comment_privacy' );
    function verify_comment_privacy( $commentdata ) {
        if ( ! isset( $_POST['privacy'] ) )
            wp_die( __( 'Error: Debes aceptar nuestra política de privacidad marcando la casilla ....' ) );
    
        return $commentdata;
    }
    
    //guarda el campo como comment meta
    add_action( 'comment_post', 'save_comment_privacy' );
    function save_comment_privacy( $comment_id ) {
        add_comment_meta( $comment_id, 'privacy', $_POST[ 'privacy' ] );
    }

    Pero al añadir el segundo fragmento de código, el que incluye la primera capa de datos que exige la ley, lo que sucede es que esta información de la primera capa se ve en todas las páginas de la web, por encima del header incluso. Digamos que flotan en la parte superior de la web. Mi functions.php queda, con este añadido, así:

    <?php
    /** Aceptación después del formulario de comentarios **/
    add_filter( 'comment_form_field_comment', 'mi_campo_de_privacidad_en_comentarios' );
    function mi_campo_de_privacidad_en_comentarios( $comment_field ) {
        return $comment_field.'<p class="pprivacy"><input type="checkbox" name="privacy" value="privacy-key" class="privacyBox" aria-req="true">&nbsp;&nbsp;Acepto la <a target="blank" href="https://ayudawp.com/muylegal/">política de privacidad</a><p>';
    }
    //validación por javascript
    add_action('wp_footer','validate_privacy_comment_javascript');
    function validate_privacy_comment_javascript(){
        if (is_single() && comments_open()){
            wp_enqueue_script('jquery');
            ?>
            <script type="text/javascript">
            jQuery(document).ready(function($){
                $("#submit").click(function(e)){
                    if (!$('.privacyBox').prop('checked')){
                        e.preventDefault();
                        alert('Debes aceptar nuestra política de privacidad marcando la casilla ....');
                        return false;
                    }
                }
            });
            </script>
            <?php
        }
    }
    
    //sin validación js
    add_filter( 'preprocess_comment', 'verify_comment_privacy' );
    function verify_comment_privacy( $commentdata ) {
        if ( ! isset( $_POST['privacy'] ) )
            wp_die( __( 'Error: Debes aceptar nuestra política de privacidad marcando la casilla ....' ) );
    
        return $commentdata;
    }
    
    //guarda el campo como comment meta
    add_action( 'comment_post', 'save_comment_privacy' );
    function save_comment_privacy( $comment_id ) {
        add_comment_meta( $comment_id, 'privacy', $_POST[ 'privacy' ] );
    }
    /** Primera capa privacidad en comentarios **/
    $acceptance = '<p class="comment-reply-title comentarios">Información sobre protección de datos</p>
    <p class="comment-subscription-form"><ul><li>Responsable: Fernando Tellado</li>
    <li>Fin del tratamiento: Controlar el spam, gestión de comentarios</li>
    <li>Legitimación: Tu consentimiento</li>
    <li>Comunicación de los datos: No se comunicarán los datos a terceros salvo por  obligación legal.</li>
    <li>Derechos: Acceso, rectificación, portabilidad, olvido.</li>
    <li>Contacto: <a href="mailto:admin@ayudawordpress.com" title="Contacta">admin@ayudawordpress.com</a>.</li>
    <li>Información adicional: Más información en <a href="https://ayudawp.com/muylegal" title="Política de Privacidad">nuestra política de privacidad</a>.</li></ul></p>';
    function ft_acceptance_comments( $form ) {
    	global $acceptance;
    	
    	return $form . $acceptance;
    }
    {
    	global $acceptance;
    
    	echo $acceptance;
    }
    	add_action( 'comment_form_field_comment', 'ft_acceptance_comments' );

    ¿Qué hago mal? Conste que no tengo ni la menor idea de php… Así que cualquier metedura de pata es posible

    • Este debate fue modificado hace 1 semana, 1 día por  jlcule.
Viendo 4 respuestas - 1 de 4 (de 4 total)
  • Añado, puesto que no se ve en los fragmentos de código, que mi functions.php comienza con la secuencia < ? php (todo junto) y después, los fragmentos de código.

    • Esta respuesta fue modificada hace 1 semana, 1 día por  jlcule.
    Moderador Fernando Tellado

    (@fernandot)

    Hola, asegúrate de que esté en el functions.php del tema, no en un plugin y quita el <?php

    Hola Fernando.

    La solución la he encontrado, curiosamente, en uno de los últimos comentarios del artículo. Alguien sugirió que el problema se solucionaba al eliminar la última línea de echo:

    echo $acceptance;

    A mí me ha funcionado. No le encuentro ninguna explicación, para empezar porque no sé php… pero igual es útil que lo pongas al pie del artículo, este milagro inexplicable puede ahorrar algunos dolores de cabeza.

    A propósito, gracias por todo el contenido de Ayudawp 🙂

    Moderador Fernando Tellado

    (@fernandot)

    A mandar 🙂

Viendo 4 respuestas - 1 de 4 (de 4 total)
  • Debes estar registrado para responder a este tema.