Cómo omitir la protección por contraseña de una publicación o página de WordPress mediante una URL

23 ene 2017, 16:37:17
Vistas: 15K
Votos: 0

Tengo una página protegida por contraseña que me gustaría que sea accesible con un enlace personalizado que incluya la contraseña como variable GET en la URL: www.dominio.tld/mi-pagina?code=micontraseñapersonalizada

Encontré esto pero no funciona: Omitir protección por contraseña en publicaciones mediante variable GET

¿Podrías ayudarme a evitar el formulario de contraseña?

Saludos

0
Todas las respuestas a la pregunta 3
0
    add_filter( 'post_password_required', function( $returned, $post )
{
   
    if( $returned && ( $_GET['pwd'] ==  $post->post_password ) )
        $returned = false;
    return $returned;

}, 10, 2 );

**Enlace de bypass para páginas protegidas por contraseña. Se debe agregar en el archivo de funciones del tema. El enlace debería verse así: https://www.example.com/post/?pwd=CONTRASEÑA

10 may 2023 21:53:09
5

Puedes usar el mismo principio que en el ejemplo trabajado, sin embargo reemplaza $_GET con $_POST. Entonces tendrías algo como esto hacia el final:

// Tu verificación personalizada para el contenido de '$_POST'
// …también verifica si de hecho existe una contraseña
// …y si el usuario es un visitante recurrente, no establezcas la Cookie nuevamente
if (
        isset( $_POST['circumvent'] ) 
        and 'disable-pass' === $_POST['circumvent'] 
        and isset( $post->post_password )
        and ! isset( 'wp-postpass_'.COOKIEHASH )
    ) {
    // Finalmente usamos la contraseña en texto plano para establecer la Cookie
    // como si el usuario la hubiera ingresado en el formulario de contraseña
    setcookie(
        'wp-postpass_'.COOKIEHASH,
        $hasher->HashPassword( wp_unslash( esc_attr( $post->post_password ) ) ),
        $expire,
        COOKIEPATH
    );
}
// Ahora muestra el contenido:
the_content();
23 ene 2017 16:45:20
Comentarios

Hola, gracias por responder. Recibí esto: PHP Fatal error: Call to a member function HashPassword() on a non-object in /home/test-user/public_html/wp-content/themes/default/template-landing-private.php on line 81

JCF JCF
23 ene 2017 16:51:29

Puede que necesites agregar global $hasher; al inicio. De lo contrario, ¿podrías publicar el archivo completo?

fergbrain fergbrain
23 ene 2017 16:56:52

/ Nombre de la plantilla: TEST /

if ( isset( $GET['code'] ) and 'mycustompassword' === $_GET['code'] and isset( $post->post_password ) and null !== 'wp-postpass'.COOKIEHASH //!isset( 'wp-postpass_'.COOKIEHASH ) ) { setcookie( 'wp-postpass_'.COOKIEHASH, $hasher->HashPassword( wp_unslash( esc_attr( $post->post_password ) ), $expire, COOKIEPATH ); }

get_header(); while ( have_posts() ) : the_post(); the_content(); endwhile; get_footer();

JCF JCF
23 ene 2017 17:10:29

Por favor, publica tu código entre comillas invertidas (`) para que tenga el formato adecuado

fergbrain fergbrain
23 ene 2017 17:17:12

Hola, lo siento, he publicado una respuesta a continuación con el código completo. ¡Gracias!

JCF JCF
23 ene 2017 17:23:12
0

en lugar de usar the_content(), utiliza echo apply_filters( 'the_content', $post->post_content ); podría estar equivocado pero creo que esto omitirá completamente el formulario de contraseña, luego puedes implementar tu propia lógica simple para decidir si mostrar o no el contenido. En cualquier caso, sin embargo, recomiendo encarecidamente no hacer esto si el contenido es información muy sensible. Es decir, espero que no sean datos personales de alguien. Adicionalmente, tendrás que asegurarte de que la publicación tenga una contraseña para que no aparezca en los resultados de búsqueda, mapas del sitio, feeds o endpoints de la API JSON de WordPress.

11 feb 2018 06:26:07