es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“get_current_user_id()” comparación estricta con número falla.

Tengo una pregunta técnica a la que me gustaría tener más información que una solución.

Conecté una función personalizada al filtro ‘template_include’ en functions.php de WordPress de la siguiente manera para trabajar en una página sin que pueda ser vista por nadie más.

Entonces, si alguien que no ha iniciado sesión en mi cuenta va a una página de un tipo de publicación personalizada ‘ressource’, la verá con el diseño estándar de single.php y no con el diseño de single-ressource.php.

Lo que sucede es que no funciona tal y como está. Tengo que cambiar el entero ’11’ en la comparación estricta a una cadena ’11’ para que funcione, como se muestra a continuación.

Fui a ver la documentación oficial para la función get_current_user_id() y parece que usan la conversión de tipos para devolver un entero o 0.

Además, cuando hago un var_dump(get_current_user_id()) en el front-end, devuelve int(11).

¿Alguien tiene alguna idea sobre por qué funciona el segundo código y no el primero?

Como señaló @Bazaim, estaba confundido acerca de la lógica involucrada.

Con el segundo código, el archivo “single-ressource.php” que quería ocultar no estaba oculto para nadie porque la lógica detrás de la condición pasada era errónea. Solo redirigía a usuarios con un user_id igual a una cadena ’11’ que es nadie porque los user_id son enteros.

El código a continuación funciona perfectamente.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El primer código no funciona porque utiliza una comparación estricta para comprobar si el ID del usuario actual es igual a 11, que es un entero. Sin embargo, la función get_current_user_id() puede devolver un entero o 0, por lo que el tipo del valor devuelto no siempre es un entero.

    El segundo código funciona porque utiliza una comparación de cadenas para comprobar si el ID del usuario actual es igual a '11'. Esto asegura que la comparación siempre sea precisa, independientemente del tipo de retorno de la función get_current_user_id().

    Sin embargo, la lógica real detrás de la condición en el segundo código es defectuosa, ya que redirige solamente a usuarios con un user_id igual a la cadena '11', lo cual no existe, ya que los ID de usuario son enteros. Para ocultar el diseño de single-ressource.php a usuarios que no sean el usuario con el ID de usuario 11, la condición en la declaración if debe cambiarse a:

    if ( $template === locate_template('single-ressource.php') && get_current_user_id() !== 11 ) { 
        return $new_template = locate_template( array( 'single.php' ) );
    }
    

    Esto redirigirá a usuarios con IDs de usuario diferentes de 11 al diseño de single.php.

Comments are closed.