Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/12/2013, 05:59
Avatar de AlejandroGalvez
AlejandroGalvez
 
Fecha de Ingreso: noviembre-2013
Mensajes: 189
Antigüedad: 12 años, 10 meses
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_key, true );
        
//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_key, true );
//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.