web-dev-qa-db-fra.com

Afficher une liste des publications récemment consultées à un utilisateur

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?

1
Pollux Khafra

Ce plugin peut répondre à vos exigences.

http://wordpress.org/extend/plugins/recently-viewed-posts

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!

Mettre à jour:

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');

2
Upeksha