web-dev-qa-db-ja.com

1週間で最も人気のある記事を表示

プラグイン 最も人気のある投稿_ wpml _ をサポートしていないので、自分で作成してみました。

私のサイトで最も人気のある投稿を表示するためのあなた自身のコードを作成することで私はこのチュートリアルを見つけました: プラグインなしでWordPressでビューによって人気の投稿を表示する方法

しかし、これは週当たりの要素を考慮に入れていません。これをどのように行うかについて正しい方向を向いてほしいのです。

このコードは投稿の実際のビュー数を更新します。

function wpb_set_post_views($postID) {
    $count_key = 'wpb_post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}
//To keep the count accurate, lets get rid of prefetching
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);

投稿にこれらのフィールドを追加します。

week_count: integer
current_week: datetime

current_weekが実際の今週と一致するかどうかを確認します。それ以外の場合はweek_countをリ​​セットして1を加算し、current_weekを実際の今週に設定します。

よりスマートでより効率的な方法でこれを行う別の方法はありますか?

5
Philip

さて、これが今週の人気記事を表示するための完全なクエリです。 meta_queryを使用して、今週中にのみクエリ結果を制限します。

今週のすべての投稿を取得し、質問で使用したカスタムフィールドwpb_post_views_countで追加された投稿ビュー数でそれらを並べ替えます。

// Current week's popular posts

$query_args = array(
    'post_type' => 'post',
    'date_query' => array(
        array(
            'year' => date( 'Y' ),
            'week' => date( 'W' ),
        ),
    ),
    'meta_key' => 'wpb_post_views_count',
    'orderby' => 'meta_value_num',
    'ignore_sticky_posts' => 1,
    'posts_per_page' => '-1',
);

$my_query = new WP_Query( $query_args );

if ( $my_query->have_posts() ) :
    while ( $my_query->have_posts() ) : $my_query->the_post();

        // add your loop content here.

    endwhile;
endif;

wp_reset_postdata();
1
Robert hue