Mantener la pagina de login
/*/**
* Mejor manejo de login fallido para quedarse en /mi-cuenta/ y mostrar mensaje.
* Pegar en functions.php (child theme) o usar Code Snippets.
*/add_action(‘wp_login_failed’, function( $username ) {
// intentar obtener la URL correcta de la página por su slug ‘mi-cuenta’
$page = get_page_by_path( ‘mi-cuenta’ );
if ( $page && isset( $page->ID ) ) {
$url = get_permalink( $page->ID );
} else {
// fallback si no encuentra la página por slug
$url = home_url( ‘/mi-cuenta/’ );
}// Forzar ?login=failed en la URL
$redirect = add_query_arg( ‘login’, ‘failed’, $url );
wp_safe_redirect( $redirect );
exit;
});/* Evitar redirigir POST legítimos desde wp-login.php; redirigir solo GETs directos */
add_action(‘login_init’, function() {
if ( isset($_SERVER[‘REQUEST_METHOD’]) && strtoupper($_SERVER[‘REQUEST_METHOD’]) !== ‘GET’ ) {
return;
}
$action = isset($_REQUEST[‘action’]) ? sanitize_key($_REQUEST[‘action’]) : ‘login’;
$allow = array( ‘logout’, ‘lostpassword’, ‘retrievepassword’, ‘rp’, ‘resetpass’, ‘postpass’, ‘confirm_admin_email’, ‘interim-login’ );
if ( in_array( $action, $allow, true ) || isset( $_REQUEST[‘interim-login’] ) ) {
return;
}// redirigir GETs a la página mi-cuenta (manteniendo params útiles)
$page = get_page_by_path( ‘mi-cuenta’ );
if ( $page && isset( $page->ID ) ) {
$base = get_permalink( $page->ID );
} else {
$base = home_url( ‘/mi-cuenta/’ );
}$args = array();
foreach ( array( ‘loggedout’, ‘checkemail’, ‘registration’ ) as $k ) {
if ( isset( $_GET[ $k ] ) ) {
$args[ $k ] = sanitize_text_field( wp_unslash( $_GET[ $k ] ) );
}
}wp_safe_redirect( add_query_arg( $args, $base ) );
exit;
});/* Shortcode que muestra el mensaje cuando ?login=failed */
add_shortcode( ‘login_notice’, function() {
if ( isset( $_GET[‘login’] ) && sanitize_text_field( wp_unslash( $_GET[‘login’] ) ) === ‘failed’ ) {
return ‘Usuario o contraseña incorrectos. Intenta nuevamente.‘;
}
return ”;
});/* Shortcode de depuración: muestra el array $_GET para verificar si llega el parámetro */
add_shortcode( ‘login_debug’, function() {
ob_start();
echo ‘‘;
echo “URL actual: ” . esc_html( ( ( is_ssl() ? ‘https://’ : ‘http://’ ) . $_SERVER[‘HTTP_HOST’] . $_SERVER[‘REQUEST_URI’] ) ) . “\n\n”;
echo “GET:\n”;
print_r( $_GET );
echo ‘‘;
return ob_get_clean();
});*/