Finalmente he conseguido crear un array para cada usuario loggeado con los ids de cada post que han visitado.
Código PHP:
//get each user read posts
function fab_set_read_posts($postID) {
if( is_single() || user_is_logged_in() ) {
$user = wp_get_current_user();
$user_id = $user->ID;
$meta_key = 'read_post';
$meta_value = $postID;
$user_meta = get_user_meta($user_id, $meta_key, true);
//if $user_meta exist update it, is not, add new user meta
if($user_meta){
// be sure $user_meta is an array
if( ! is_array( $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 {
array_push($user_meta, $meta_value);
update_user_meta( $user_id, $meta_key, $user_meta, false );
}
}else{
add_user_meta( $user_id, $meta_key, $meta_value, true );
}
}
}
Se añade este codigo al archivo funtions.php y se llama a la funcion en el single.php
Código PHP:
<php fab_set_read_posts($post->ID) ?>
Cuando un usuario que esta loggeado visite una post, se guardara el id de dicho post en el array. Después se puede usar estos datos para cosas varias, en mi caso quiero comprobar si un post ha sido ya leido o no. Solo hay que recuperar el array usando get_user_meta() y comprobar si el id actual se encuentra en el array. En el este caso, el codigo va dentro de un loop, pero se puede usar fuera del loop siempre que le pasemos el id de un post.
Código PHP:
$user = wp_get_current_user();
$user_id = $user->ID;
$meta_key = 'read_post';
$meta_value = $post->ID;
$user_meta = get_user_meta($user_id, $meta_key, true);
if($user_meta){
// be sure $user_meta is an array
if( ! is_array( $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)) {
$read = "Leido";
} else {
$read = "Sin leer";
}
}
Espero que le sea util a alguien!