web-dev-qa-db-ja.com

新しいメタキーを追加して投稿にタイムスタンプを割り当てる方法

私は自分のウェブサイトでループを作成し、投稿が閲覧されているかどうかを確認する方法を探していましたが、何も見つかりませんでした。

私がこれを達成することができる唯一の方法は新しいメタキー(カスタムフィールド)を作成し、値としてタイムスタンプを割り当てることです。そうすればループを作成し、時間範囲内で見られている投稿をリストするためにその値を使うことができます分.

問題は、私がワードプレスに非常に非常に新しいということです、そして、私はこのT_Tをする方法を知りません

1
David Garcia

これを達成するための非常に単純化した方法は以下の通りです。

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


}

注:上記の関数はあなたのテーマのfunctions.phpファイルに入り、ユーザーにページを表示する直前に起動されるtemplate_redirectアクションにフックされます。この時点で、舞台裏では、私たちのrecently_read関数が起動し、キーreading_thisの下にタイムスタンプを追加します(好きな名前を付けます)。これは、この投稿または任意の投稿が表示されるたびに発生します。特定の投稿にタイムスタンプがすでに存在する場合は、それに応じてタイムスタンプが更新されます。

次に、このキーを使って投稿のリストを取得するには、テーマファイル内でそれらの投稿を表示する場所で次の手順を実行します。

$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>';
}

上記はいくつかの方法で改善することができますが、これは間違いなくあなたが始められるようになるでしょう。

注:過去X分間に投稿が表示されたかどうかを判断するロジックはありません。そのためにあなたはreading_thisという名前のmeta_keyにあなた自身のロジックを適用してあなたの好みに合わせてデータを操作することができます。

1
userabuser