yStandardに人気記事をプラグインなしで表示させるカスタマイズ方法について書きます。
ほかのテーマにも応用できるかと思います!
以下のサイト様のコードを参考にさせていただきました。ありがとうございます!
PHP
子テーマのfunctions.phpやコードスニペットに追記してください。
// 閲覧数をセットする関数
function setPostViews($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 is_bot() {
if (empty($_SERVER['HTTP_USER_AGENT'])) {
return true; // ユーザーエージェントがない場合ボットと判定
}
$bot_pattern = '/bot|crawl|slurp|spider|mediapartners/i';
return (bool) preg_match($bot_pattern, $_SERVER['HTTP_USER_AGENT']);
}
// 閲覧数を取得する関数
function getPostViews($postID) {
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if ($count === "") { // カウントがなければ0をセット
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
return esc_html("0 View");
}
return esc_html($count . ' Views');
}
// 管理画面に閲覧数の列を追加
function count_add_column($columns) {
$columns['views'] = '閲覧数';
return $columns;
}
add_filter('manage_posts_columns', 'count_add_column'); // 投稿ページに追加
add_filter('manage_pages_columns', 'count_add_column'); // 固定ページに追加
// 管理画面に閲覧数を表示
function count_add_column_data($column, $post_id) {
if ($column === 'views') {
echo esc_html(getPostViews($post_id)); // 閲覧数を表示
}
}
add_action('manage_posts_custom_column', 'count_add_column_data', 10, 2); // 投稿ページ
add_action('manage_pages_custom_column', 'count_add_column_data', 10, 2); // 固定ページ
// 閲覧数列を並び替え可能にする
function column_views_sortable($sortable_columns) {
$sortable_columns['views'] = 'views';
return $sortable_columns;
}
add_filter('manage_edit-post_sortable_columns', 'column_views_sortable'); // 投稿ページ
add_filter('manage_edit-page_sortable_columns', 'column_views_sortable'); // 固定ページ
// 閲覧数で並び替える処理を追加
function my_add_sort_by_meta($query) {
if (!is_admin() || !$query->is_main_query()) {
return;
}
if ($query->get('orderby') === 'views') {
$query->set('meta_key', 'post_views_count');
$query->set('orderby', 'meta_value_num');
}
}
add_action('pre_get_posts', 'my_add_sort_by_meta');
// 閲覧数を投稿ページで増加させる
function add_post_views_to_singular_header() {
if (is_singular() && !is_user_logged_in() && !is_bot()) {
setPostViews(get_the_ID());
}
}
add_action('wp_head', 'add_post_views_to_singular_header');
// 人気記事を表示するショートコード
function display_popular_posts() {
ob_start(); // 出力バッファリングを開始
$popular_args = array(
'post_type' => 'post', // 投稿タイプを指定
'meta_key' => 'post_views_count', // 閲覧数を指定
'orderby' => 'meta_value_num', // ソートの基準を閲覧数に
'order' => 'DESC', // 降順(閲覧数が多い順)
'post_status' => 'publish', // 公開済み投稿
'posts_per_page' => 5, // 表示件数は5件
);
$popular_query = new WP_Query($popular_args);
if ($popular_query->have_posts()) :
?>
<ul class="popular__list">
<?php while ($popular_query->have_posts()) : $popular_query->the_post(); ?>
<li class="popular__item">
<a href="<?php the_permalink(); ?>" class="popular__link">
<!-- サムネイル表示 -->
<div class="popular__thumbnail">
<?php if (has_post_thumbnail()) : ?>
<img class="popular__thumbnail-img" src="<?php echo esc_url(get_the_post_thumbnail_url(get_the_ID(), 'post-thumbnail')); ?>" alt="<?php echo esc_attr(get_the_title()); ?>">
<?php endif; ?>
</div>
<div class="popular__txt">
<!-- タイトル表示 -->
<div class="popular__ttl"><?php the_title(); ?></div>
<!-- 投稿日時表示 -->
<time class="popular__time"><?php the_time('Y/m/d'); ?></time>
<!-- 閲覧数表示 -->
<p class="popular__views"><?php echo esc_html(getPostViews(get_the_ID())); ?></p>
</div>
</a>
</li>
<?php endwhile; wp_reset_postdata(); ?>
</ul>
<?php
else:
echo '<p class="popular__nodata">現在、人気記事はありません</p>';
endif;
return ob_get_clean(); // バッファの内容を返す
}
add_shortcode('popular_posts', 'display_popular_posts');
人気記事を表示するショートコードを作成しましたので、任意の場所で、以下のショートコードを書くと、人気記事が表示されます。
[[popular_posts]]
あとはお好みでCSSで整えてください。
以下はサムネイルを消していますが、display:noneをなくせば表示されます。
/* サムネイルを非表示 */
.popular__thumbnail {
display: none;
}
/* 人気記事リスト全体のスタイル */
.popular__list {
list-style: none;
margin: 0;
padding: 0;
}
/* 各アイテムのスタイル */
.popular__item {
display: flex;
align-items: center;
margin-bottom: 10px;
padding: 10px;
border-bottom: 1px solid #ddd;
}
/* 記事タイトルのスタイル */
.popular__ttl {
font-size: 1.1em;
font-weight: bold;
color: #333;
margin: 0;
}
/* 投稿日時のスタイル */
.popular__time {
font-size: 0.9em;
color: #888;
margin-left: 10px;
}
/* 閲覧数のスタイル */
.popular__views {
font-size: 0.9em;
color: #555;
margin-left: auto; /* 閲覧数を右端に配置 */
}
以上です~