¿Es posible mostrar un botón solo si el usuario ha iniciado sesión?

4 dic 2018, 13:48:01
Vistas: 21.7K
Votos: 1

Tengo una clase "rty-downloads" y quiero que esta clase se muestre solo para usuarios que han iniciado sesión en WordPress, ¿es posible?

Gracias de antemano

3
Comentarios

Hola, publica tu código, por favor.

Krzysiek Dróżdż Krzysiek Dróżdż
4 dic 2018 13:49:09

sí, es posible hacer esto en WordPress, por favor envía el código

vikrant zilpe vikrant zilpe
4 dic 2018 13:49:36

<?php if ( is_user_logged_in() ) { //mostrar la publicación } else { //continuar normalmente } ?>

vikrant zilpe vikrant zilpe
4 dic 2018 13:54:06
Todas las respuestas a la pregunta 5
1

Puedes usar esto en cualquier página/plantilla de WordPress.

<?php if ( is_user_logged_in() ) : ?>
    //Código solo para usuarios logueados
<?php endif; ?>

Consulta la documentación para más información: https://developer.wordpress.org/reference/functions/is_user_logged_in/

4 dic 2018 21:32:14
Comentarios

¡muy útil, gracias!

AlphaX AlphaX
11 oct 2020 18:43:58
0

Solución más simple: Puedes usar CSS puro de la siguiente manera:

.button-class {display: none;}
.logged-in .button-class {display: block;}
4 dic 2018 21:29:29
0

Para mí solo funciona

/* mostrar botón del blog solo si está conectado */
li.button-class {
    visibility: hidden !important;
    display: none !important;
}
.logged-in li.button-class { 
    visibility: visible !important;
    display: inline-block !important;
}
9 nov 2019 19:30:20
3

Prueba esto

// Agrega la acción al hook 'loop_start'
add_action( 'loop_start', 'tu_funcion' );

// Define la función personalizada
function tu_funcion() {
    // Comprueba si el usuario está logueado
    if ( is_user_logged_in() ) {
        // Si está logueado, muestra el elemento li con clase 'hide'
        echo '<li id="text-2" class="hide">';
    } else {
        // Si no está logueado, muestra el elemento li sin clase
        echo '<li id="text-2">'; 
    }
}
4 dic 2018 13:52:36
Comentarios

¿Por qué loop_start?

Jacob Peattie Jacob Peattie
4 dic 2018 13:58:43

Lo he intentado pero no parece funcionar, la forma más fácil podría ser una función que verifique si el usuario está logueado para mostrar esta clase "rty-downloads"

Gracias de antemano

user102195 user102195
4 dic 2018 14:01:44

Sí reemplaza, tu clase y código css en esta función

dado dado
4 dic 2018 14:57:31
6

Esto es lo que uso:

functions.php (en el tema hijo):

add_action('shutdown', function() {
    $final = '';
    $levels = ob_get_level();
    for ($i = 0; $i < $levels; $i++)
    {
        $final .= ob_get_clean();
    }
    echo apply_filters('final_output', $final);
}, 0);

add_filter('final_output', function($output) {
  $display1 = 'none';
  $display2 = 'block';

  if(is_user_logged_in()) {
    $display1 = 'block';
    $display2 = 'none';
  }

  $from = array('%display1%', '%display2%');
  $to = array($display1, $display2);
  $output = str_replace($from,$to,$output);

  return $output;
});

CSS:

.for-logged-in-users {
display: %display1%;
}
.for-logged-out-users {
display: %display2%;
}

Luego simplemente puedes añadir estos dos nombres de clase a los elementos que quieras mostrar/ocultar. De esta forma puedes mostrar/ocultar cualquier elemento basado en cualquier lógica.

27 ago 2021 13:15:34
Comentarios

final_output no es un filtro central de WordPress que yo conozca. ¿Proviene de tu plugin de caché o similar? ¿Cómo filtra el CSS que normalmente se sirve estáticamente por el servidor web?

Rup Rup
27 ago 2021 18:09:52

Tampoco estoy seguro de que haya un beneficio al hacerlo de esta manera en comparación con la solución pura de CSS usando la clase logged-in en la etiqueta body que WordPress ya genera.

Rup Rup
27 ago 2021 18:10:19

Lo siento, olvidé insertar la parte add_action, lo he corregido :)

Bandi Bandi
29 ago 2021 11:55:03

Realmente no entiendo la solución con CSS puro, ¿puedes explicarla?

Bandi Bandi
29 ago 2021 11:56:35

Si estás conectado al sitio, WordPress añade una clase 'logged-in' a la etiqueta body. El selector CSS body.logged-in .for-logged-in-users se refiere a elementos que tienen la clase for-logged-in-users y que están dentro de una etiqueta body con la clase logged-in. Cuando hay varios elementos que coinciden, CSS le dará prioridad al selector más específico. Así que puedes hacer .for-logged-in-users { display: none; } para ocultar esos elementos por defecto y también body.logged-in .for-logged-in-users { display: block; } para que cuando exista la clase logged-in en el body, sobrescribamos el display: none con display: block.

Rup Rup
29 ago 2021 14:43:05

Ya veo, esa es una mejor solución, gracias por explicarlo. Sin embargo, tengo otras clases CSS y textos únicos que necesitan ser modificados/reemplazados basados en condiciones más complejas, así que para mí tiene más sentido modificar también estas clases con esta función PHP.

Bandi Bandi
30 ago 2021 16:12:51
Mostrar los 1 comentarios restantes