記事タイトルの前にNEW!をつけたいな。
アクセスがあったときにまず見てもらいたいのが新着記事ですね。ワードプレスの設定ではこの機能はついていないので自分でカスタマイズしていきます。
使用するテーマは「Cocoon」です。
新着表示NEW!を表示する条件
新着表示NEW!を表示する場所
すべての記事一覧の記事タイトル前に新着「NEW!」を表示させます。(ショートコードで表示する新着記事にも対応)
- トップページ
- アーカイブページ
- 記事本文ページ
新着記事の判別方法
一言に新着記事といっても、投稿をしてからいつまでの記事にNEWをつけたいのか?などを判別するためにいくつかの方法があります。
- 時間で判別(投稿してから何日か)
- 件数で判別(投稿記事の数)
- 時間+件数(上記の組み合わせ)
このうち今回は
- 時間で判別 する方法
でおこないます。
例えば、投稿してから3日以内の記事にNEW!をつけられる?
新着記事に一定期間だけ「NEW!」を表示するカスタマイズの手順
全体の流れ
- Step1PHPコードの編集
ここで新着表示の設定をする(投稿日取得、表示する日数)
- フィルターでタイトルをカスタマイズ
投稿が「post」タイプかどうか確認する。 - 現在の日付と投稿された日付を取得
現在の時刻とその投稿が公開された時刻を比較する。 - 新着判定
もし投稿日時が3日以内なら、「NEW!」をタイトルの前に表示。 - 新着でない場合は通常のタイトル
3日以上経過している場合は、通常のタイトルを表示する。
- フィルターでタイトルをカスタマイズ
- Step2CSSの編集
NEW!のデザインを整える
- Complete完成
プレビューで動作確認
PHP
まず、以下のPHPコードをfunctions.php
に追加します。
- 管理画面の「外観」から「テーマファイルエディター」
- Cocoon Child: テーマのための関数 (functions.php)をクリックします
- 元から書いているコード(テーマ用関数)は消さずにPHPを記述します
- //以下に子テーマ用の関数を書く、から下の行に追加しましょう
こちらのPHPコードは、ワードプレスの投稿タイトルに「NEW!」のラベルを表示させる仕組みです。新しく投稿された記事がある一定期間内(ここでは3日間)の場合に、そのタイトルの前に「NEW!」を追加します。
//新着記事にNEW
add_filter('the_title', function($title, $id) {
$days = 3;// 表示期間3日
if (get_post_type($id) == 'post') {
$now = date_i18n('U');// 現在の時刻取得
$post_time = get_the_time('U',$id);// 投稿ページの投稿日時取得
$last = $now - ($days * 24 * 60 * 60);// 表示期間内であるかどうか判定
if ($post_time > $last) {
$title = '<span class="new-txt">NEW!</span>' . $title;
}
}
return $title;
}, 20, 2);
コードの意味
- フィルターの登録
add_filter('the_title', function($title, $id) {
add_filter
関数を使って、the_title
フィルターに新しいフィルター関数を登録しています。これにより、記事のタイトルが表示される前に特定の処理をおこなうことができます。具体的には、投稿タイトルに「NEW!」を追加する処理です。
- 表示期間の設定
// 表示期間3日 $days = 3;
表示期間を3日に設定します。この期間内に投稿された記事に「NEW!」ラベルを付けます。
- 記事のタイプの確認
if (get_post_type($id) == 'post') {
get_post_type($id)
は、指定された投稿IDの投稿タイプを取得します。この条件文は、投稿の種類が「post」(通常の投稿)であるかを確認しています。これにより、他のカスタム投稿タイプ(例えばページや商品など)には「NEW!」が表示されません。 - 現在の時刻と投稿時刻を取得
// 現在の時刻取得 $now = date_i18n('U'); // 投稿ページの投稿日時取得 $post_time = get_the_time('U',$id);
$now
で現在の時刻をタイムスタンプ形式で取得します。タイムスタンプは1970年1月1日からの経過秒数で表されます。$post_time
では、その投稿が公開された時刻をタイムスタンプ形式で取得します。これにより、現在時刻と投稿された時刻を直接比較することができます。
- 新着記事の条件判定(表示期間内であるかどうか)
// NEW表示期間 $last = $now - ($days * 24 * 60 * 60); if ($post_time > $last) { $title = '<span class="new-txt">NEW!</span>' . $title; }
$last
は3日前の時刻を計算しています。3日 × 24時間 × 60分 × 60秒
で3日前の秒数を求めています。この計算結果を使って投稿が3日以内かどうかを判断します。もし条件が満たされれば、記事のタイトルに”<span class=”new-txt”>NEW!</span>”を追加します。
- ラベル変更されたタイトルの返却
変更されたタイトル(またはそのままのタイトル)を返します。これが実際に画面に表示されます。
このコードは、投稿が公開されてから3日以内であれば、投稿タイトルに「NEW!」というラベルを自動で追加します。日数は $days = 3;
の部分で調整可能です。例えば、7日に変更したい場合は $days = 7;
に変更できます。
新着記事に表示するNEW!のデザインを整える
CSSでデザインを整えます。
このCSSではNEW!(文字色:赤、背景色:なし)になります。
/* 新着記事のNEW!---------------------------------------------- */
.new-txt{
color: #ff0000;/*文字色*/
margin-right:5px;/*NEW!右側の余白*/
}
背景色を付ける場合はこちら。NEW!
/* 新着記事のNEW!---------------------------------------------- */
.new-txt{
background-color: #ff0000;/*背景色*/
color:#fff;/*文字色(白)*/
font-size:.8em;
padding:.1em .5em;/*内側余白*/
border-radius:1px;/*丸み*/
margin-right:5px;/*NEW!右側の余白*/
}
点滅させるには
点滅してより目立たせるときはこちらのCSSを追加します。NEW!
/* 点滅 */
.new-txt {
animation: blinking 1s ease-in-out infinite alternate;
}
@keyframes blinking {
0% {opacity: 0;}
100% {opacity: 1;}
}
完成/新着記事に一定期間だけ「NEW!」が表示されます
はい、完成です。
投稿してから3日以内の記事タイトル前にNEW!がついていますね。このようなPHPコードを使うことで、ユーザーに新着記事を強調表示することができます。
Comment コメントはこちらへ