This post was published 12 years ago. It may be exremely outdated.
Ayer modifiqué un poco el script de AyudaWordPress, pero se quedó medio cojo: los artículos salían en el Feed y en el loop de WordPress, así que realmente no cumplía del todo su objetivo. Sin embargo lo he actualizado y he solventado ambas carencias, ahora funciona perfectamente. Y el uso es idéntico: se crea un artículo y se le añade el campo personalizado “login” con el valor “1” para que se oculte.
El código se debe añadir en el archivo functions.php del theme.
// Nuestra funcion para forzar el inicio de sesion
function forzar_login()
{
if (is_single())
{
global $post; // Obtenemos la informacion respecto al articulo actual
if (get_post_meta($post->ID, 'login', true) == '1') // Comprobamos el valor del campo personalizado login
{
// Para ver este articulo tiene que estar registrado
if (!is_user_logged_in()) // Comprobamos si el usuario ha iniciado sesion
{
// No ha iniciado sesion, redirigimos
auth_redirect();
}
else
{
// Ha iniciado sesion, luego puede ver el articulo
}
}
else
{
// Puede ver este articulo tranquilamente porque no esta bloqueado
}
}
else
{
global $wp_query; // Obtenemos la consulta
$wp_query->query_vars['meta_key'] = 'login'; // Modificamos la nueva consulta para buscar articulos con proteccion
$posts_a_excluir = array(); // En esta matriz almacenamos los articulos a ocultar
while ($wp_query->have_posts()) : $wp_query->the_post();
if (get_post_meta($wp_query->post->ID, 'login', true) == '1') // Comprobamos el valor del campo personalizado login
{
// El articulo es solo para registrados, lo guardamos
$posts_a_excluir[] = $wp_query->post->ID;
}
endwhile;
$wp_query->query_vars['meta_key'] = ''; // Limpiamos modificaciones
if (!is_user_logged_in()) $wp_query->query_vars['post__not_in'] = $posts_a_excluir; // Excluimos los articulos que se deben ocultar, solo si no ha iniciado sesion
$wp_query->query($wp_query->query_vars); // Repetimos la consulta
return;
}
}
add_action('wp', 'forzar_login'); // Añadimos la funcion a la accion
Code language: PHP (php)
Como antes, el archivo listo para ser usado como plugin lo podéis descargar aquí.
11 thoughts on “Artículos sólo para usuarios registrados en WordPress (Mejorado)”