Cómo omitir la protección por contraseña de una publicación o página de WordPress mediante una URL
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

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

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();

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

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

/ 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();

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

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.
