【WordPress】「更新日」を変更しないで投稿や固定ページ、カスタム投稿タイプの更新を行う方法

公開日:2016年8月22日 使い方など
Knowledge Base Wordpress カスタマイズ

WordPressでは、コンテンツを作成したときや過去のコンテンツを修正するとき、「更新日」という項目が今の日時に変更され、いつ更新されたかが分かるようになっています。古いコンテンツでも更新されていることが解るので必要かつ便利な機能なのですが、更新されてしまうと都合の悪いことありませんか?例えば

  1. ちょっと文章を修正したいとき
  2. 使わなくなったショートコードを入れ替えるだけのとき
  3. 古い広告コードを貼り替えるだけのとき
  4. 時事ネタなので更新日を変更せずにコンテンツに詳しい情報だけを追加したいとき
  5. アイキャッチ画像だけを変更や追加したいとき
  6. 公開した翌日などに「あ!しまった!」を修正するとき

など、特にたくさんのコンテンツを修正する場合には更新日はそのままにしておきたいときもあるもの。

また、最近では更新日に関する情報はGoogleなどの検索エンジンからも読み取られ、更新された情報として反映されると不都合なこともあるかもしれません。

かくいう私も同じジャンルの情報は同じような文章の流れでコンテンツを作りたいので、「この方がいい感じ」と思うと過去のものへ遡って全部修正するということがありますから、以前から「更新日を更新しない方法ないかなぁ」と思っていました。

もっと言えば私の作るサイトのトップページにある更新一覧は更新日を基準に表示していますから、なおさら「ちょっと修正」したものが更新として表示されることを避けたいことと、最終更新から一定期間経ったコンテンツには「古い記事や投稿ですよ~」とお知らせするようにしていますから、なおさら避けたいところです。

プラグインでいろいろ探してみましたが見当たらず、半ば仕方ないとあきらめていましたが、インターネット、特にWordpress関連の情報というのは実にすごいもの、きちんと対応方法が紹介されていましたので、自分なりの解釈とおまけ情報を含めて紹介します。

参考にさせていただいた情報

私はプログラマーではありませんのでこんなコードを書くのは到底無理。以下のサイトを参考にさせていただきました

のフォーラムで取り上げられている内容を

で分かりやすく解説されていました。基本コードはそのままですが、文末に固定ページやカスタム投稿タイプでも使えるようにする方法を追加しています。

WordPressバージョン4.9.8の更新通知でダッシュボードに表示されるのは・・・新しいエディタの説明でした。

【WordPress】固定ページの使い方(何故固定ページが必要なのか?)

【Autoptimize】プラグインとスライダー系プラグインを併用すると表示に不具合が出る時の対処いろいろ(検証)


更新日を変更するかどうかを選択して投稿を更新する方法

以下のコードをテーマのfunctions.phpへそのまま追加するだけで、投稿編集画面右上に新しく「更新日のアップデート」という窓が追加され、

  1. 「更新する」を選択して「更新」ボタンをクリックした場合は更新日をアップデート(現在の日付と時刻に)する
  2. 「更新しない」を選択して「更新」ボタンをクリックした場合は更新日をアップデートしない
/*更新日をアップデートする/しないを選択して更新を実行*/
/*①管理画面が開いたときに実行*/
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', 'low' );
}
/* ④投稿画面に表示するフォームのHTMLソース */
function html_update_level_custom_box() {
    $update_level = get_post_meta( $_GET['post'], 'update_level' );
    echo '<div style="padding-top: 3px; overflow: hidden;">';
    echo '<div style="width: 100px; float: left;"><input name="update_level" type="radio" value="high" ';
    if( $update_level[0]=="" || $update_level[0]=="high" ) echo ' checked="checked"';
    echo ' />更新する</div><div style="width: 100px; float: left;"><input name="update_level" type="radio" value="low" ';
    if( $update_level[0]=="low" ) echo ' checked="checked"';
    echo '/>更新しない<br /></div>';
    echo '</div>';
}
/* ⑤設定したカスタムフィールドの値をDBに書き込む記述 */
function save_custom_field_postdata( $post_id ) {
    $mydata = $_POST['update_level'];
    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 = $_POST['update_level'];
	if( $mydata == "low" ){
		unset( $data["post_modified"] );
		unset( $data["post_modified_gmt"] );
	}
	return $data;
}
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. コードは合っているはずなのに更新できないときは
  6. 特にエラーの出た行内に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があり、Wordpressのエディタチェックではこれを「’」や「)」など閉じ子のエラーとして認識され更新できないことがあります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。
  7. 「何かが間違っています...」と表示され、更新できないときは
  8. このエラーは本当に何がエラーなのかをWordpressのチェックが判断できない場合に発生します。解決策としてはその画面を開き直すことなのですが、その際希に元のコードがすべて削除されてしまう場合がありますので、今表示されているコードを一旦どこかへコピーしてからページの再読み込みをするようにしてやり直します。
    ※このエラーは不明なエラーなので予期せぬ動きをする可能性がありますので特に慎重な対処が必要です
これらのエラー対処については以下のページが参考になるかも知れません

コードを転載する場合には

ご自身のサイトで当ページで紹介しているコードを転載される場合には当ページへのリンクを入れていただきますようお願いいたします

固定ページやカスタム投稿タイプも含めて機能させる方法

この一連のコードはカスタムフィールドを作って、そこに一旦更新日を格納するかしないかを選択、その後更新ボタンが押されたときに上書きするしないという動作をします。

要するにカスタムフィールドが追加されていればどんな投稿タイプでも使えるということになりそうなのでテストしてみたところ上手く動きましたので、おまけ情報として紹介します。

③カスタムフィールドを投稿画面に追加の部分を修正

一連のコードではこの段階でカスタムフィールドを作る動作をしているので、ここのコードをちょっと改造します。
元のコードは

/* ③カスタムフィールドを投稿画面に追加 */
function add_update_level_custom_box() {
    //ページ編集画面にカスタムメタボックスを追加
    add_meta_box( 'update_level', '更新レベル', 'html_update_level_custom_box', 'post', 'side', 'high' );
}
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. コードは合っているはずなのに更新できないときは
  6. 特にエラーの出た行内に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があり、Wordpressのエディタチェックではこれを「’」や「)」など閉じ子のエラーとして認識され更新できないことがあります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。
  7. 「何かが間違っています...」と表示され、更新できないときは
  8. このエラーは本当に何がエラーなのかをWordpressのチェックが判断できない場合に発生します。解決策としてはその画面を開き直すことなのですが、その際希に元のコードがすべて削除されてしまう場合がありますので、今表示されているコードを一旦どこかへコピーしてからページの再読み込みをするようにしてやり直します。
    ※このエラーは不明なエラーなので予期せぬ動きをする可能性がありますので特に慎重な対処が必要です
これらのエラー対処については以下のページが参考になるかも知れません

コードを転載する場合には

ご自身のサイトで当ページで紹介しているコードを転載される場合には当ページへのリンクを入れていただきますようお願いいたします

この中の'post'という記述を○○を含めるという形に変更します。変更するコードは
array('post','追加するポストタイプ')
です。これを

  1. 'post'の部分へ上書きします
  2. 「追加するポストタイプの部分」へ固定ページやカスタム投稿タイプ名を追加します(複数の場合は「,(コンマ)」で区切る)

例えば固定ページ(page)とtestというカスタム投稿タイプを追加する場合は
array('post','page','test')
というふうにします。これで追加したポストタイプで同様の動作をするようになります。

functions.phpへコードを追加する前に

ちょっとまった!!この情報を見て「ふんふん、このコードをコピペすればいいのね!」と安易にfunctions.phpへコード追加してはいけません。functions.phpというのはとても大事なファイルで、編集に失敗すると画面が真っ白になってサイトの表示どころか管理画面すら入れなくなりますから細心の注意を払ってくださいね。

安全にコードを追加する方法や万が一の際の対象方法などは以下のページを参考になさってください

おまけ② ping送信やプッシュ通知の対応/最終更新日が古いコンテンツに表示するメッセージ

この方法でデータベース上に格納されている更新日を更新(ややこしいなぁ)しないように設定することはできました。あと懸念されるのが、その際に更新通知であるping送信やpush通知はどうなるんだろうということ。前述した通り私はプログラマーではないので詳しいことは言えないのですが、恐らく制御していないので通常通り送られてしまうと思います。そこでたくさんのコンテンツを一気に編集するときは、

で紹介しているようにping送信を制限し、Push通知に使っている「Push Press」プラグインを停止して、無駄に通知を行ってスパムと認識されたりサーバーに負荷をかけないよう工夫しています。

それから文頭でさらっと書いた古いコンテンツに「この情報は古いですよ~」とお知らせする機能ですが、今回同様functions.phpへ追記するだけで機能させることができますので併せて紹介しておきますね。

いろいろとカスタマイズできるWordpressですが、これでますます便利に使えるのでは?と願っております。

ひまあーと(管理人)
  • 記事の作者: ひまあーと(管理人)

  • ☆最後までお読みいただきありがとうございました。記事作者のひまあーとです。
    ☆Wordpressでサイトをカスタマイズしていく上で有用な情報を配信しつつ、「ココナラ」でサイトカスタマイズのお手伝い、不具合の修復、サイト引っ越し代行などをさせていただいております。
    ☆Wordpressネタが多いですが、趣味の「園芸」「卓球」などの情報や日々の出来事などもどんどん増やしていきますのでよろしくお願いいたします。


いつでもご相談・サイトカスタマイズの依頼を受け付けています

Wordpressのカスタマイズ、不具合解消のご相談はすべてココナラのダイレクトメッセージからお受けしております。まずはこちらのバナーからお気軽にお問い合わせください。

※一度もココナラを使ったことがない方はココナラへの無料登録が必要です。こちらから登録後、上のリンクをクリックする、またはココナラトップページから「ひまあーと」を検索してお問い合わせください。


【スポンサーリンク】


記事の拡散にご協力をお願いします

閲覧いただきありがとうございました。役に立つ情報でしたら是非SNSでシェアをお願いします

関連情報