スポンサー
少し前になるのだけども、各投稿のmeta情報部分の”公開日”にnewマークを付けた。
WordPressで新着の記事に「New!」を表示させる覚書。
もう、随分前から試行錯誤していたことがある。 トップページやアーカイブページで、新しい投稿のアイキャッチ画像にリボンを付ける。>[CSS]画像やパネルに斜めにしたリボンを重ねるスタイルシート | コリス>新着記事に好きな日数だけ「NE
その後、ふとしたことからGoogleの検索結果に最終更新日を表示できるようにすると例えばGoogle検索のオプションの日付指定検索で更新日を基準に検索結果が表示されるとの記事を読み
>>WordPress 記事の見直しと最終更新日の表記。それを Google に伝える
「おー!それは良いではないか!」と
むかしむかしの記事数が結構な数になるねこもりやは
WordPressで<time>タグを使って最終更新日を自動的に表示する方法でウエブシュフさんも推奨されているので、さっそく”更新日”を表示することにした。
記事の公開日と更新日、どっちもあってなお良い。アイコン付き
通常、既存のテンプレートとか使ってると、投稿の公開日は表示設定されているけれど、記事の更新日は設定されていないよね。 でも、いるよね?更新日。 てことで、随分前に入れてたんだけど忘れてたー! 投稿の最終更新日を表示する /*
それだけで、一応人間には公開日と更新日とが目で見てわかる様になったので良いのだけど、(ボットの巡回&更新を)待てど暮らせど、検索結果には公開日しか反映されません。
で、この暮れも押し迫った時期に、おもーい腰を上げてもう一度ソースを見直し&手直しをしてみたのでその経緯を記します。
追記 2014/6/17
本投稿の対処だけでは、検索結果に反映されないので、またまた追加で投稿しています。
Googleの検索結果に最終更新日と今更だけど著者情報を表示させる為の再挑戦。
Googleの期間指定での検索結果に 公開日より最終更新日の方が新しければ、最終更新日を反映させたいと思いやってみて数か月。 そろそろ、反映されてるかと思ったけども・・・ なにがいけないんだろうと改めて検索してみると、出てこな
当初施したこと
functions.phpに追加記述
まずは、以下をfunctions.phpに記述します。
予約投稿にも対応させるため↓のコメントアウトにあるように更新日が公開日より古い場合は公開日を返すようになっています。
/* get_the_modified_time()の結果がget_the_time()より古い場合はget_the_time()を返す。 同じ場合はnullをかえす。 それ以外はget_the_modified_time()をかえす。 */ function get_mtime($format) { $mtime = get_the_modified_time('Ymd'); $ptime = get_the_time('Ymd'); if ($ptime > $mtime) { return get_the_time($format); } elseif ($ptime === $mtime) { return null; } else { return get_the_modified_time($format); } }
表示させたい部分に記述(改良前)
以下をテンプレート、single.phpやアーカイブテンプレートなどの表示したい部分に記述します。
ねこもりやは、META部分は別ファイルにしてテンプレートに読み込んでいます。
別ファイルにして読みこむようにすると、テンプレートを訂正修正するときに、ひとつのファイルだけ手をくわえればいいのでメンテナンス性が向上しますね♪(後述)
<span class="new"> <?php $days = 3; //Newを表示させたい期間の日数 $today = date_i18n('U'); $entry = get_the_time('U'); $kiji = date('U',($today - $entry)) / 86400 ; if( $days > $kiji ){ echo '<img src="'; bloginfo('template_directory'); echo '/img/new.png" width="30" height="15" alt="new" />'; } ?> 公開日:<time class="entry-date" datetime="<?php the_time('c') ;?>"><?php the_time('Y年m月d日 l') ?></time> </span> <br /> <?php if (get_the_modified_date('Y/n/j') != get_the_time('Y/n/j')) : ?> <span class="new"> <?php $days=3; //UPをつける日数 $today=date_i18n('U'); $entry=get_the_modified_date('U'); $sa=date('U',($today - $entry))/86400; if( $days > $sa ){ echo '<img src="'; bloginfo('template_directory'); echo '/img/up.png" width="30" height="15" alt="up" />'; } ?> <?php if ($mtime = get_mtime('Y年m月d日 l')) echo '最終更新日: ', $mtime; ?> </span> <?php endif; ?>
公開日から3日間はnewアイコンを、更新日から3日間はupアイコンを表示するようにしています。
>>WordPressで最終更新日を表示する方法(予約投稿にも対応) | WP SEOブログ
ここでのミソは、13行目の
公開日:<time class="entry-date" datetime="<?php the_time('c') ;?>"><?php the_time('Y年m月d日 l') ?></time>
目的のGoogleボットなどのコンピュータに日付データを拾ってもらう(理解してもらう)ために、”timeタグ”を使っているところ。
>><time>-HTML5タグリファレンス
このタグがないと人間には日付に見える部分もコンピュータにはただの文字列。
結果~更新日は検索結果に表示される?
こちらのサイトで加筆修正を行った記事「自分のサイトがツイッターにスパム認定されてしまった時の対策」を Google で検索し、期間指定をしてみた所しっかりと検索結果にあらわれたので、「トライアスロンオンライン」さっそく試させて頂く事にした。
引用:WordPress 記事の見直しと最終更新日の表記。それを Google に伝える
と、あるので、
さー!これでOK!!
とばかりに、喜んでおりましたが・・・
待てど暮らせど(しつこい)、検索結果に更新日が表示されません。
タグの見直し
こんな時に、盲目的にコピペで乗り切ろうとする根性ナシが仇となりまする。
よーく考えれば、わかることですがね。
そりゃー、<time>で括ってるのは公開日だけなんですから公開日しか拾わないよねー
リンク先の検証結果では、「ちゃんと期間指定した検索結果に出てきた」とあるけども、今一度そのものずばりのタイトル名(自分のサイトがツイッターにスパム認定されてしまった時の対策)で期間指定して検索してみたけど出てきませんでした┌|゚□゚;|┐ガーン!!
しごく、当たり前の結果に納得。
なので、改めて自分なりにやってみることに。
表示したい場所に記述(改良版)
<?php if (get_the_modified_date('Y/n/j') != get_the_time('Y/n/j')) : ?> <span class="new"> <?php $days=3; //UPをつける日数 $today=date_i18n('U'); $entry=get_the_modified_date('U'); $sa=date('U',($today - $entry))/86400; if( $days > $sa ){ echo '<img src="'; bloginfo('template_directory'); echo '/img/up.png" width="30" height="15" alt="up" />'; } ?> <time class="entry-date" datetime="<?php the_modified_time('c') ?>"><?php if ($mtime = get_mtime('Y年m月d日 l')) echo '最終更新日: ', $mtime; ?></time> </span> <?php endif; ?> <br /> <span class="new"> <?php $days = 3; //Newを表示させたい期間の日数 $today = date_i18n('U'); $entry = get_the_time('U'); $kiji = date('U',($today - $entry)) / 86400 ; if( $days > $kiji ){ echo '<img src="'; bloginfo('template_directory'); echo '/img/new.png" width="30" height="15" alt="new" />'; } ?> <?php if (get_the_modified_date('Y/n/j') == get_the_time('Y/n/j')) : ?> 公開日:<time class="entry-date" datetime="<?php the_time('c') ;?>"><?php the_time('Y年m月d日 l') ?></time> <?php elseif (get_the_modified_date('Y/n/j') != get_the_time('Y/n/j')) : ?> 公開日:<?php the_time('Y年m月d日 l') ?> <?php endif; ?> </span>
解説すると、
公開日と更新日が同じ場合は、公開日を<time>で括り、公開日と更新日が違う場合は<time>タグで括らない。
公開日と更新日が違う場合は、更新日を表示するようにしているので、その更新日は常に<time>タグで括るように。
演算子はこちらを参考に。
>>条件分岐 | PHP Labo
あ、ついでに当初は更新日を公開日より下に表示してたけど逆にしました。
META部分を別ファイルに
ねこもりやのこのMETA部分は意外に長く、おまけにあちこちで使ってるのと、いずれ違う場所でも使うこともあることを踏まえ、別ファイルにしています。
<p class="meta"> <?php if (get_the_modified_date('Y/n/j') != get_the_time('Y/n/j')) : ?> <span class="new"> <?php $days=3; //UPをつける日数 $today=date_i18n('U'); $entry=get_the_modified_date('U'); $sa=date('U',($today - $entry))/86400; if( $days > $sa ){ echo '<img src="'; bloginfo('template_directory'); echo '/img/up.png" width="30" height="15" alt="up" />'; } ?> <time class="entry-date" datetime="<?php the_modified_time('c') ?>"><?php if ($mtime = get_mtime('Y年m月d日 l')) echo '最終更新日: ', $mtime; ?></time> </span> <?php endif; ?> <br /> <span class="new"> <?php $days = 3; //Newを表示させたい期間の日数 $today = date_i18n('U'); $entry = get_the_time('U'); $kiji = date('U',($today - $entry)) / 86400 ; if( $days > $kiji ){ echo '<img src="'; bloginfo('template_directory'); echo '/img/new.png" width="30" height="15" alt="new" />'; } ?> <?php if (get_the_modified_date('Y/n/j') == get_the_time('Y/n/j')) : ?> 公開日:<time class="entry-date" datetime="<?php the_time('c') ;?>"><?php the_time('Y年m月d日 l') ?></time> <?php elseif (get_the_modified_date('Y/n/j') != get_the_time('Y/n/j')) : ?> 公開日:<?php the_time('Y年m月d日 l') ?> <?php endif; ?> </span> <span><a href="<?php bloginfo('home'); ?>/?monthnum=<?php the_time('m') ?>&day=<?php the_time('d') ?>" class="olddays">〇年前のこの日、何してた?</a></span> <br /> <?php if ( count( get_the_category() ) ) : ?> <?php printf( __( 'Categories: %2$s' ), 'entry-utility-prep entry-utility-prep-cat-links', get_the_category_list( ', ' ) ); ?> | <?php endif; ?> <?php $tags_list = get_the_tag_list( '', ', ' ); if ( $tags_list ): ?> <?php printf( __( 'Tags: %2$s' ), 'entry-utility-prep entry-utility-prep-tag-links', $tags_list ); ?> | <?php endif; ?> 閲覧数:<?php if ( function_exists ( 'wpp_get_views' ) ) { echo wpp_get_views ( get_the_ID() ); } ?> | <?php comments_popup_link( __( 'Leave a comment' ), __( '1 comment', 'ari' ), __( '% comments' ) ); ?> <?php edit_post_link( __( 'Edit' ), '| ', '' ); ?></p>
上記がねこもりやのmeta.phpです。
これを、読み込むために表示したい箇所に以下の様に記述します。
<?php get_template_part('meta'); ?>
参考サイト
条件分岐 | PHP Labo
WordPress 記事の見直しと最終更新日の表記。それを Google に伝える
HTML5タグリファレンス
WordPressで最終更新日を表示する方法(予約投稿にも対応) | WP SEOブログ
WordPressで<time>タグを使って最終更新日を自動的に表示する方法|ウェブシュフ
後記
毎度反省することではありますが、ちゃんと自分の頭で考え、やってみることが一番の近道。
盲目的にコピペで乗り切るのは限界があります。
ただ、この改良はまだ実装したばかりで、結果がでるにはしばらく時間が掛かるかもしれません。
最終的な更新日を基準に期間指定した検索結果に反映されるようになれば、昔書いた記事でも更新して手直ししていれば甦らせることができるのでありがたいし、検索する側の身になって考えても、とても良いことだと思うのです。
スポンサー
ニュースレターを購読する