¿Es posible mostrar un botón solo si el usuario ha iniciado sesión?
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

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/

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">';
}
}

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

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.

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?

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.

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.

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.
