J'ai beaucoup de publications vidéo sur mon site et je souhaite montrer à l'utilisateur une liste des publications qu'il a récemment consultées. Je suppose que la meilleure solution consiste simplement à ajouter l’identifiant post à un tableau de leur usermeta lorsqu’ils visitent un post, mais je me demande comment puis-je faire cela tout en conservant la possibilité de leur montrer un ordre chronologique les a vus. Et aussi je veux couper le nombre de messages dans le tableau en le maintenant à 20 messages ou pour que le tableau ne soit pas hors de contrôle. Des idées?
Ce plugin peut répondre à vos exigences.
Usage
get_recently_viewed_posts( $max_shown = 10 )
renvoie une chaîne de li. recently_viewed_posts( $max_shown = 10 )
imprime une div
Si vous souhaitez apprendre à développer vous-même cette fonctionnalité, téléchargez le plug-in et consultez les fichiers source. WordPress est Open Source!
Le plugin ci-dessus n'a pas fonctionné. L'approche suivante aidera à obtenir les identifiants vidéo récemment visionnés.
<?php
/*
* Plugin Name: WPSE_63266_Recently_Viewed
*/
function wpse_63266_update_recently_viewed(){
/**
* If is admin or isn't single, then return.
* To get only singular video posts use; if(!is_singular('videos')) return;
*/
if(is_admin() || !is_single()) return;
global $post;
// Get the current post id.
$current_post_id = get_the_ID();
if(is_user_logged_in()){
// Store recently viewed post ids in user meta.
$recenty_viewed = get_user_meta(get_current_user_id(), 'recently_viewed', true);
if( '' == $recenty_viewed ){
$recenty_viewed = array();
}
// Prepend id to the beginning of recently viewed id array.(http://php.net/manual/en/function.array-unshift.php)
array_unshift($recenty_viewed, $current_post_id);
// Keep the recently viewed items at 5. (http://www.php.net/manual/en/function.array-slice.php)
$recenty_viewed = array_slice($recenty_viewed, 0, 5); // Extract a slice of the array
// Update the user meta with new value.
update_user_meta(get_current_user_id(), 'recently_viewed', $recenty_viewed);
} else {
/**
* For non-logged in users you can use the same procedure as above
* using get_option() and update_option()
*/
}
}
add_action('wp_footer', 'wpse_63266_update_recently_viewed');
function wpse_63266_show_recently_viewed(){
$recenty_viewed = get_user_meta(get_current_user_id(), 'recently_viewed', true);
echo '<pre>'; print_r($recenty_viewed); echo '</pre>';
}
add_action('wpse_63266_recently_viewed', 'wpse_63266_show_recently_viewed');
?>
do action()
dans votre modèle pour voir le changement des valeurs du tableau (identifiants vidéo) lorsque vous parcourez les publications.
do_action('wpse_63266_recently_viewed');