プラグインを使わないでWordPressのトップページで投稿の新着順10件と人気順10件の表示をしたい

プラグインを使わないでWordPressのトップページで投稿の新着順10件と人気順10件の表示をしたい

WordPressでブログサイトを作成するときトップページには大抵、新着順に記事が表示されます。しかし新着順と同時に人気記事順(表示回数)に表示したいケースもあるでしょう。プラグインを使う方法もありますが今回はプラグインを使わないで表示させる方法を紹介します。

目次

function.phphへの記述

function set_post_views($postID) {
    $count_key = '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);
    }
}

// 投稿が表示されるたびにアクセス数を記録する
function track_post_views($post_id) {
    if (!is_single()) return;
    if (empty($post_id)) {
        global $post;
        $post_id = $post->ID;
    }
    set_post_views($post_id);
}
add_action('wp_head', 'track_post_views');

上記記述で投稿が閲覧されるたびにアクセス数を記録する関数を functions.php に追加します。

// アクセス数表示の除去
function posts_column_views($defaults) {
    $defaults['post_views'] = __('Views');
    return $defaults;
}
add_filter('manage_posts_columns', 'posts_column_views');

function posts_custom_column_views($column_name, $id) {
    if ($column_name === 'post_views') {
        echo get_post_meta($id, 'post_views_count', true);
    }
}
add_action('manage_posts_custom_column', 'posts_custom_column_views', 10, 2);

次に、アクセス数を表示しないようにするためのフィルターフックを追加します。

front-page.phpへの記述

<h2>人気の投稿</h2>
<ul>
<?php
$popular_posts = new WP_Query(array(
    'posts_per_page' => 10,
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num',
    'order' => 'DESC'
));
if ($popular_posts->have_posts()) :
    while ($popular_posts->have_posts()) : $popular_posts->the_post();
?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
    endwhile;
else :
    echo '<p>No popular posts found.</p>';
endif;
wp_reset_postdata();
?>
</ul>
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

初めてホームページを作成したのは1996年。
2000年よりフリーランスで主に中小企業、学校、各種公的団体、個人事業主のWordPressを活用したホームページ制作を行っています。WordPressテーマはそれぞれのクライアントに合わせて作成しています。
WordPressを活用したサイト運営のための情報発信をしていきます。

目次