Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/12/2013, 05:59
Avatar de AlejandroGalvez
AlejandroGalvez
 
Fecha de Ingreso: noviembre-2013
Mensajes: 189
Antigüedad: 11 años
Puntos: 49
Respuesta: crear un sistema de cursos con seguimiento del progreso

¡Muchas gracias por compartir tu código! Si lo permites me gustaría optimizarlo un poco y arreglar un par de pequeños fallos que podrían causar problemas:

1- La función para guardar el nuevo post leído:
Código PHP:
//get each user read posts
function fab_set_read_posts$postID ) {
    
    
//Comprobamos que es single Y que el usuario esté logueado.
    
if( is_single() && user_is_logged_in() ) {
        
        
//Obtenemos directamente la ID del usuario conectado.
        
$user_id    get_current_user_id();        
        
$meta_key    'read_post';    
        
$meta_value $postID;
        
        
$user_meta    get_user_meta$user_id$meta_keytrue );
        
//Si no existía el meta de usuario, lo inicializamos como un array vacío
        
$user_meta    = ( $user_meta ) ? $user_meta : array();
        
        
//if $meta_value is not in the array, push it into the array and update $user_meta
        
if( in_array$meta_value$user_meta ) ) {
         
            echo 
"Ya has leído este tema.";
            
        } else {
            
            
$user_meta[]    = $meta_value;
            
update_user_meta$user_id$meta_key$user_meta );
            
        }
        
    }


2- El código para recuperar si ha leído el post actual o no:

Código PHP:
//Obtenemos directamente la ID del usuario conectado.
$user_id    get_current_user_id();     
$meta_key    'read_post';
$meta_value    $post->ID;

$user_meta    get_user_meta$user_id$meta_keytrue );
//Si no existía el meta de usuario, lo inicializamos como un array vacío
$user_meta    = ( $user_meta ) ? $user_meta : array();

if( 
in_array$meta_value$user_meta ) ) {
    
    
$read "Leido";

} else {
        
    
$read "Sin leer";
    

Como comentario adicional sugerir el uso de add_action() y do_action() para ejecutar la función que actualiza el meta de usuario. Sería más estándar si se va a incluir en un producto que se vaya a distribuir.

Un saludo.