
ワードプレスでは、記事を一旦下書きに戻しても、その記事のURLにアクセスすると記事が表示され、「え?どうして?」「他の人にも見えてるの?」と焦る場合がありますね。
これはワードプレスの仕様であり、下書きの記事が表示されるのは「ログインしている状態のみ」。一般のアクセスでは「404エラー」が表示されるので、そこは心配ありません。
でも本当に記事が非表示になっているかログアウトして確認するのも結構面倒、ということで、下書きにした記事はログイン中でも「404エラー」として表示する方法、また、公開にはなっていないことが分かりつつ、内容も確認できる方法もあわせてご紹介します。
下書きの記事は404エラーを表示する
では、早速、以下となるようにしていきましょう。
- ワードプレスにログイン時:
下書きにした記事のURLにアクセスすると記事が表示される。 - ワードプレスにログインしてない時(一般のアクセス時)
下書きにした記事のURLにアクセスすると404エラーが表示される
↓↓↓↓↓↓(これを以下に変更)
- ワードプレスにログイン時:
下書きにした記事のURLにアクセスすると404エラーが表示される - ワードプレスにログインしてない時(一般のアクセス時)
下書きにした記事のURLにアクセスすると404エラーが表示される
これを実現するには、
以下のコードをテーマの functions.php に追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | /* ------------------------------------ 下書きの記事にアクセスすると ログイン時でも404エラーを表示する ------------------------------------ */ function block_draft_access_to_logged_in_users() { if (is_single() && is_user_logged_in()) { global $post; // プレビューアクセスの場合は除外 if (isset($_GET['preview']) && $_GET['preview'] == 'true') { return; } // 下書き記事なら404を表示 if ($post && $post->post_status === 'draft') { global $wp_query; $wp_query->set_404(); status_header(404); nocache_headers(); include(get_404_template()); exit; } } } add_action('template_redirect', 'block_draft_access_to_logged_in_users'); |
このコードを functions.php に追加する方法は、
以下を見てみてください。
このコードは以下の動作をします。
- 投稿記事ページにいるか確認( is_single() )
- ログイン中かどうか確認( is_user_logged_in() )
- その記事が下書きか確認( $post->post_status === 'draft' )
- すべて当てはまる場合に、強制的に404ページを表示
これを見ると分かるように、
ログイン中に下書きの記事にアクセスすると、「404ページを表示する」という動作になってます。
こうすることで、下書きにしたのに記事が表示され、他の人にも見えてるのかと不安になる、などもなくなりますね。
404エラー以外の対応法(おすすめ)
上で見た404エラーの表示でも良いですが、
ワードプレスがログイン中に限っては下書き記事も表示してくれるので、それはそのままにして、下書きであることが分かるような表示をする、というのがおすすめ。
私の場合ではこれを使ってますが、具体的には以下のような表示。

こうした表示があれば、
下書きにしたはずの記事が表示されても、分かりやすいですよね。
通常のワードプレスの動作との違いは以下になります。
- ワードプレスにログイン時:
下書きにした記事のURLにアクセスすると記事が表示される。 - ワードプレスにログインしてない時(一般のアクセス時)
下書きにした記事のURLにアクセスすると404エラーが表示される
↓↓↓↓↓↓(これを以下のように変更)
- ワードプレスにログイン時:
下書きにした記事のURLにアクセスすると下書きである旨の表示がされ、その後に記事が表示される - ワードプレスにログインしてない時(一般のアクセス時)
下書きにした記事のURLにアクセスすると404エラーが表示される
この表示をするには、
以下のコードをテーマの functions.php に追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | /* ------------------------------------ ログイン時、下書きの記事にアクセスすると 「この投稿は下書きです」表示をする ------------------------------------ */ function custom_draft_handling() { // 投稿ページ(投稿、固定ページなど)のみで動作 if (!is_singular()) { return; } global $post; // 投稿が存在しない、または下書きでない場合は何もしない if (!$post || $post->post_status !== 'draft') { return; } // ログインしていない場合は404ページを表示 if (!is_user_logged_in()) { status_header(404); nocache_headers(); include(get_404_template()); exit; } // プレビュー表示時はメッセージを挿入しない if (isset($_GET['preview'])) { // 'true'のチェックは不要 return; } // ログイン中の下書き記事に注意メッセージを追加 add_filter('the_content', 'custom_add_draft_notice'); } add_action('template_redirect', 'custom_draft_handling'); // アクション名を変更 function custom_add_draft_notice($content) { $notice = '<div style="background:#fff3cd; border:1px solid #ffeeba; padding:10px; margin-bottom:20px; text-align:center; font-weight:bold;"> ※ この投稿は下書きです(ログイン中のみ表示されています) </div>'; return $notice . $content; } |
このコードは以下をしています。
- 動作する状態:
- 投稿ページ(投稿・固定ページなど)にアクセスされたときだけ処理を実行する。
- 記事が「下書き(draft)」でない場合は何もしない
- 表示について:
- ログインしていない状態では、404エラーを表示する
- ログイン中でも、「プレビュー表示」のときはメッセージを出さない
- それ以外(ログイン中+下書き直打ち)では、記事の本文の前に「この投稿は下書きです~」のメッセージを表示する
こうすることで、
一旦下書きにした記事にアクセスしても分かりやすくなりますね。
なぜ下書き記事のURLで、記事が表示されるの?
最後に、一度下書きに戻したのに、なぜログインした状態でURLでアクセスすると記事が表示されるのかも見ておきましょう。
これは実は不具合ではなくワードプレスの正しい動作(仕様)で、サイト運営者の作業をスムーズにするための仕組みのようです。
- 記事を一時的に非公開にして大幅修正したいとき
→ 元のURLでプレビューできれば、アクセスもスムーズ - キャンペーン記事などを季節ごとに再利用したいとき
→ 下書きに戻しておけば非公開状態にしつつ、あとで元のURLからすぐ確認できる
一旦下書きに戻しての修正作業中も、実際に公開されていたURLで現在の修正状況やレイアウトを確認できると、作業も非常にスムーズです。
たとえば編集者、管理者みたいな複数人で作業している場合を考えると、その都度別のプレビューURLにアクセスし直すなど、確認のたびに手間がかかって作業が中断され、効率が落ちてしまいます。
でも下書きにしても元のURLでアクセスできるのは分かりやすいですし、結果として、全体の効率化にもなりますよね。
ただ、一人で運営をすることが多い個人ブログでは、逆に少しわかりづらいこともあるので、ワードプレスの仕様(元のURLでアクセスすると記事が表示される、という仕様)は残しつつ、でも「今は下書きになっている」ことが分かる表示を出すように工夫するのが良いかと思います。
- ※)補足:キャッシュが原因の場合も:
WordPressのテーマやプラグインで「キャッシュ」機能を使っている場合(つまりデータを覚えておく機能を使っている場合)、一度公開した記事を下書きに戻しても、古いキャッシュ(古いデータ)が表示されてしまうことがあります。もし「下書きに戻したのに、どうも表示がおかしいな?」と感じたら、ブラウザやWordPressのキャッシュプ系ラグインのキャッシュをクリアしてみるのもお試しください
まとめ
私の場合、古い記事を整理したりしているとき、このワードプレスの「下書きに戻した記事でも、ログイン中なら元のURLにアクセスすれば表示される」という動作に、「あれ?まだ公開してたっけ?」と少し混乱してしまうことがあります。
そんな時、以前はまず表示された記事の編集に入って、右上のボタンが「公開」になっているか「更新」になっているかをチェックするなどしてましたが、これが地味に面倒でイライラと(笑)
でも今回ご紹介したような方法を使えば分かりやすいし、作業の効率化にもなりますね。
ブログの収益化について、迷っていたり、分からないなどあれば、以下の無料メルマガも登録してみてくださいね。
コメント