• Resuelto tvalades

    (@tvalades)


    Buenas! Tengo un CPT creado llamado galería en la que creo galerías de fotos. En la página /galeria tengo un listing grid de los CPTs y quiero que una vez intente ingresar en el CPT en cuestión, en la galería, pida una contraseña. Con el editor clásico de WordPress he puesto la opción de «Protegido con contraseña» a cada una de las páginas pero no me está protegiendo la página. ¿Cómo puedo solventarlo?

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 6 respuestas - de la 1 a la 6 (de un total de 6)
  • Yordan Soares

    (@yordansoares)

    Hola, @tvalades:

    Si quieres establecer una contraseña para todas las publicaciones del tipo de contenido personalizado que has creado, podrías probar el siguiente código, que acabo de escribir para ti cortesía:

    /**
     * WordPress:
     * Proteger las publicaciones de la galería con una contraseña definida
     */
    add_action( 'the_post', function( $post ){
    	if ( $post->post_type == 'galeria' ) { // ID del tipo de contenido personalizado
    		$post->post_password = 'M/K0nTr@Z3ñ@'; // La contraseña prestablecida
    	}
    } );

    Recuerda cambiar galeria con el ID real de tu tipo de contenido personalizad, en caso de que este sea distinto.

    Por otro lado, para activar el código anterior, puedes escoger cualquiera de las siguientes opciones:

    • Opción 1: Añadirlo en el archivo functions.php de tu tema hijo… si estás usando uno. Si no tienes un tema hijo, y no te interesa crear uno, elige otra de las opciones a continuación, ya que no se recomienda activar códigos en el archivo functions.php de tu tema principal (o parent) porque podrías perder tus personalizaciones al actualizarlo;
    • Opción 2: Añadirlo a un plugin de funciones personalizadas. Lee este artículo de José Ramón Bernabéu para saber más: Agregar funcionalidades a través de un plugin de funciones en WordPress;
    • Opción 3: Añadirlo con el plugin Code Snippets. Una de las ventajas de este plugin es que almacena el código en la base de datos, así que no importa si desactivas o actualizas el tema (opción 1) o tu plugin de funciones personalizadas (opción 2). Por otro lado, este plugin tiene un sistema de detección de errores que impedirá la ejecución de código si este tiene algún problema.
    Iniciador del debate tvalades

    (@tvalades)

    Hola @yordansoares gracias por tu respuesta y sobre todo tan rápido. He realizado lo que me comentas y sigue sin protegerlo. El CPT de galeria lo he creado con jet engine, que no se si de algo ayuda o sirve la información. Lo he metido en el functions.php, mi post type slug es galeria, he cambiado la contraseña pero nada… 🙁

    Yordan Soares

    (@yordansoares)

    Hola, @tvalades:

    Mi recomendación es entrar en contacto con los desarrolladores de ese plugin y preguntarles cómo bloquear los contenidos añadidos con este producto, porque el código te compartí arriba debería funcionar, si usan las funciones nativas de WordPress para añadir los tipos de contenido personalizados.

    Iniciador del debate tvalades

    (@tvalades)

    ¡Hola @yordansoares! Al final lo solucioné con un código js para proteger las páginas. Se me fue la cabeza comentarlo por aquí. Gracias por tu tiempo y tu ayuda.

    Yordan Soares

    (@yordansoares)

    Me alegra saber que lograste hacerlo funcionar, @tvalades 🙂

    Sería genial si pudieras compartir el código que indicas, para que otros usuarios con una necesidad similar a la tuya (y que también usen JetEngine), puedan configurar las entradas del mismo modo.

    Iniciador del debate tvalades

    (@tvalades)

    Agregué el siguiente código en el functions.php de mi theme:

    function agregar_script_contraseña() {
    if (is_singular('galeria')) { // Reemplaza 'nombre-de-tu-CPT' con el nombre de tu Custom Post Type
    wp_enqueue_script('proteger-CPT', get_template_directory_uri() . '/js/proteger-pagina.js', array('jquery'), '1.0', true);
    }
    }
    add_action('wp_enqueue_scripts', 'agregar_script_contraseña');

    y en la carpeta js cree un archivo llamado proteger-pagina.js que contiene el siguiente código:

    jQuery(document).ready(function($) {
        var contraseñaCorrecta = 'micontrasena'; // Reemplaza 'micontrasena' con la contraseña que desees
    
        if ($('.single-galeria').length) { // Reemplaza 'nombre-de-CPT' con el nombre de tu Custom Post Type
            if (confirm('Esta entrada está protegida con contraseña. Por favor, ingresa la contraseña:')) {
                var contraseñaIngresada = prompt('Por favor, ingresa la contraseña:');
                if (contraseñaIngresada !== null) {
                    ocultarContraseña();
                    validarContraseña(contraseñaIngresada);
                } else {
                    window.history.back(); // Regresar a la página anterior o ajusta según tus necesidades
                }
            } else {
                window.history.back(); // Regresar a la página anterior o ajusta según tus necesidades
            }
        }
    
        function ocultarContraseña() {
            // Reemplaza el campo de contraseña con un campo de texto temporal
            $('input[type="password"]').replaceWith(function() {
                return $('<input>', { type: 'text', name: $(this).attr('name'), id: $(this).attr('id'), value: $(this).val() });
            });
        }
    
        function validarContraseña(contraseña) {
            // Restaura el campo de contraseña original antes de validar
            $('input[type="text"]').replaceWith(function() {
                return $('<input>', { type: 'password', name: $(this).attr('name'), id: $(this).attr('id'), value: $(this).val() });
            });
    
            if (contraseña !== contraseñaCorrecta) {
                alert('Contraseña incorrecta. El contenido permanecerá bloqueado.');
                window.history.back(); // Regresar a la página anterior o ajusta según tus necesidades
            }
        }
    });
    
Viendo 6 respuestas - de la 1 a la 6 (de un total de 6)
  • El debate ‘Proteger CPTs’ está cerrado a nuevas respuestas.