¡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.