web-dev-qa-db-fra.com

Comment ajouter une nouvelle clé méta et attribuer un horodatage aux publications

J'ai essayé de trouver un moyen de créer une boucle sur mon site Web et d'afficher les messages en cours de lecture/lecture, mais je n'ai rien trouvé.

Le seul moyen d'y parvenir serait de créer une nouvelle clé méta (champ personnalisé) et d'affecter l'horodatage en tant que valeur. Ainsi, je peux créer une boucle et utiliser sa valeur pour répertorier les publications surveillées dans un intervalle de temps, par exemple 5 minutes.

Le problème est que je suis très nouveau sur wordpress et que je ne sais pas comment faire cela T_T

1
David Garcia

Une méthode très simpliste pour y parvenir serait la suivante:

add_action('template_redirect', 'recently_read');
function recently_read(){

    global $post;

    //only run this function for the posts post_type
    if ( !is_single() ) 
        return;

    //get the current time in the format of: 2013-02-22 11:55:51 
    $timestamp = current_time('mysql'); 

    //add the $timestamp variable to the meta_key for this post
    update_post_meta($post->ID, 'reading_this', $timestamp);


}

Remarque: la fonction ci-dessus va dans votre fichier thème functions.php et est liée à l'action template_redirect qui est déclenchée juste avant d'afficher la page à l'utilisateur. À ce stade, en coulisse, notre fonction recently_read se déclenche et ajoute un horodatage sous la clé reading_this (nommez-la à votre goût). Cela se produira chaque fois que cet article ou n'importe quel article sera vu. Si un horodatage existe déjà pour une publication donnée, il le mettra à jour en conséquence.

Ensuite, pour récupérer une liste de publications avec cette clé, procédez comme suit dans les fichiers de thème où vous souhaitez que ces publications s'affichent.

$recently_read = get_posts( 
    array(
        'posts_per_page'  => 5,       //how many posts we want to show at most
        'meta_key' => 'reading_this', //get posts by our meta key
        'orderby' => 'meta_value',    //order posts by the value stored in the key
        'order' => 'DESC'             //order posts in descending order (newest to oldest)
   )
); 

foreach ($recently_read as $read) {
    echo '<a href="'. get_permalink($read->ID) . '">'. $read->post_title .'</a>';
}

Ce qui précède pourrait être amélioré de plusieurs manières, mais cela vous aidera certainement à démarrer.

Remarque: Ceci est vide de toute logique qui détermine si la publication a été vue au cours des X dernières minutes. Pour cela, vous pouvez appliquer votre propre logique à la méta_key nommée reading_this et manipuler les données à votre guise.

1
userabuser