WordPress記事を修正した時に更新日を変更するかしないかを選択できるようにするカスタマイズ方法

当サイトは、記事の更新日をGoogleに伝えるような設定になっています。更新日をGoogleに伝えている

具体的に書くと、更新日に以下のようなtimeタグが設定されています。

<time class="entry-date date updated" datetime="2016-09-29T07:58:14+00:00">2016/9/29</time>

このように書くことで、Googleの検索結果に更新日が表示されています。

Google検索結果に更新日が適用された状態

詳細や実装方法は以下。

僕は、Googleで検索するとき、そのページの日付を結構見ます。 検索結果でいったらこの部分。 この日付が古かっ...

このように記事の更新日を検索結果に表示することで、「記事をちょこちょこ見直して手を入れている」ということをアピールすることができます。

ただ、記事の内容に大きく追記したり、修正したりしたのなら、更新日を変更するのもありでしょう。けれど、誤字を見つけて修正した時などは「こんなちょっとの修正で更新日を変更してしまって良いのかな?」といつも思っていました。

実際に、誤字修正であっても、更新したのには変わりないので、更新日を変更してしまっても良いとは個人的には思っています。

ただ、Google自体はどう思っているかは僕などにはわかりません。もしかしたらGoogle側は、「更新日が新しい方が検索順位が良いことをいいことに、ちょっと修正して上位表示させようとしているな」と考える(今後そうなる)ことも無きにしもあらずです(実際のところはGoogleの人にしか分かりません)。

なので、記事を更新したら、以下のような動作になるようにしたいと思うようになります。

  • 大幅な記事の修正:更新日を変更
  • 誤字修正程度のちょっとした修正:更新日を変更しない

こういったことができるようにならないかと、調べてみたら良い方法があったので紹介したいと思います。

今回のWordpressカスタマイズを行うと投稿の管理画面に以下のような「更新日の変更」項目が出て、更新日を変更するかどうかを選択できるようになります。

投稿管理画面の更新日の変更設定項目

これにより、更新日を検索エンジンに伝えるかを自分で制御することができるようになります。

スポンサーリンク
レクタングル(大)広告

カスタマイズの主な手順

今回のカスタマイズに必要な手順はたったこれだけです。

  1. functions.phpにコードを貼り付ける

基本的に、コピペ一発で実装することができるので、実装するだけであれば非常に簡単です。

functions.phpにコードを貼り付ける

WordPressテーマ(できれば子テーマ)の中にあるfunctions.phpの最後の方に、以下のコードを追記します。

//管理画面が開いたときに実行
add_action( 'admin_menu', 'add_update_level_custom_box' );
//更新ボタンが押されたときに実行
add_action( 'save_post', 'save_custom_field_postdata' );

//カスタムフィールドを投稿画面に追加
function add_update_level_custom_box() {
  //ページ編集画面にカスタムメタボックスを追加
  add_meta_box( 'update_level', '更新日の変更', 'html_update_level_custom_box', 'post', 'side', 'high' );
}

//投稿画面に表示するフォームのHTMLソース
function html_update_level_custom_box() {
    $post = isset($_GET['post']) ? $_GET['post'] :null;
  $update_level = get_post_meta( $post, 'update_level' );

  $level = $update_level ? $update_level[0] : null;
  echo '<div style="padding-top: 3px; overflow: hidden;">';
  echo '<div style="width: 100px; float: left;"><input name="update_level" type="radio" value="high" ';
  if( $level=="" || $level=="high" ) echo ' checked="checked"';
  echo ' />更新する</div><div><input name="update_level" type="radio" value="low" ';
  if( $level=="low" ) echo ' checked="checked"';
  echo '/>更新しない<br /></div>';
  echo '<p class="howto" style="margin-top:1em;">更新日時を変更するかどうかを設定します。誤字修正などで更新日を変更したくない場合は「変更しない」にチェックを入れてください。</p>';
  echo '</div>';
}

//設定したカスタムフィールドの値をDBに書き込む記述
function save_custom_field_postdata( $post_id ) {
  $mydata = isset($_POST['update_level']) ? $_POST['update_level'] : null;
  if( "" == get_post_meta( $post_id, 'update_level' )) {
    /* update_levelというキーでデータが保存されていなかった場合、新しく保存 */
    add_post_meta( $post_id, 'update_level', $mydata, true ) ;
  } elseif( $mydata != get_post_meta( $post_id, 'update_level' )) {
    /* update_levelというキーのデータと、現在のデータが不一致の場合、更新 */
    update_post_meta( $post_id, 'update_level', $mydata ) ;
  } elseif( "" == $mydata ) {
    /* 現在のデータが無い場合、update_levelというキーの値を削除 */
    delete_post_meta( $post_id, 'update_level' ) ;
  }
}

//「更新」以外は更新日時を変更しない
add_filter( 'wp_insert_post_data', 'my_insert_post_data', 10, 2 );
function my_insert_post_data( $data, $postarr ){
  $mydata = isset($_POST['update_level']) ? $_POST['update_level'] : null;
    if( $mydata == "low" ){
        unset( $data["post_modified"] );
        unset( $data["post_modified_gmt"] );
    }
    return $data;
}

やることといったら、これをコピペするだけと簡単です。

上記のコードは、以下のWordpressフォーラムに書かれていたものを参考にさせていただきました。

参考 トピック: [解決済] 記事を修正した時に更新日時(modified_time)を変更せずに保存する方法はな « サポートフォーラム — WordPress

ただ、上記リンクにあるコードをそのまま使用すると、noticeが5ヶ所ほど出たので修正してあります。あと、機能のキャプションなども変更しています。

動作確認

先程のコードをfunctions.phpに貼り付けると、投稿管理画面に以下のような「更新日を変更」という設定項目が表示されます。

投稿画面に「更新日の変更」設定項目が表示

更新日を変更しない

この「更新日の変更」を「変更しない」にして更新ボタンを押しても更新日は変わりません。

更新日の変更を行わない

今回の更新の前に適用された更新日が表示されます。

更新日をGoogleに伝えている

更新日を変更する

「更新日の変更」を「変更する」に選択して更新ボタンを押すと

更新日の変更を行う

更新日が書き換えられます。

記事の更新日が変更された状態(Wordpressデフォルト)

「更新日の変更」を「変更する」にした状態は、Wordpressデフォルトの動作と同様になります。

まとめ

このように、結構簡単なカスタマイズで、投稿記事を修正した時「更新日を変更するかどうか」の選択を自前で行えるようになります。

実際、「ちょっとした修正の更新日を検索エンジンに伝えること」をGoogleがどのように思っているかは僕にはわかりません。

ただ「こんなちょっとの変更で更新日を変更するのは何だかなぁ」とか「記事によって更新日変更の扱いを変えたい」なんて場合には、今回のカスタマイズは手軽で使いやすいかと思います。

今回紹介した方法は、Simplicity最新版にはデフォルトで備わっているのでカスタマイズ不要です。