WordPressの投稿を非表示にする時間を予約設定できる「PublishPress Future」について、忘備録を記載します。
「PHPやWordPressを最新バージョンにする」のが最良ですが、
クライアントの都合でそれができない場合もあるため、それ以外の方法をご紹介します。
そもそも「 PublishPress Future」とは?
WordPressには「予約投稿」といって、「いつ公開するか」を設定する機能がありますが、
「いつ非公開にするか?」を設定する機能はないので、プラグインを入れる必要があります。
そのプラグインの一つに「PublishPress Future」があります。
限定商品の販売や、会社説明会の予約など、「非公開する時間を予約したい」時に活用できます。
デフォルトの投稿以外にも、固定ページやカスタム投稿などにも、
「どの投稿タイプに設定するか」など、細かく設定できるのが利点です。

方法1. Basic認証を解除する
Basic認証が wp-cron.php
などのファイルの更新を妨げている可能性があります。
Basic認証をすべて解除して確認してください。
Basic認証なしで正常に動くことを確認したら、Basic認証の設定場所と.htaccess
のコードを確認してください。
テスト環境のように、サイト全体にBasic認証を設定すると、ファイルの更新を妨げるのでエラーが発生してしまいます。
しかし、wp-login.php
などの特定のファイルにBasic認証を設定すると、プラグインに影響を与えないです。
「セキュリティを向上させるために、WordPressのログインファイルにBasic認証をかけたい」時の.htaccess
の書き方の例を挙げておきます。
# 【サーバーがApacheの時】
# WordPressのログインファイルにBasic認証を設定する
<Files wp-login.php>
# AuthUserFileには、サーバー上の具体的なファイルパスを記述します。
AuthUserFile /path/to/.htpasswd
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
</Files>
# ログインファイル以外
# 外部アクセスを禁止して、セキュリティを向上させる
<Files wp-config.php>
order allow,deny
deny from all
</Files>
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>
<Files wp-comments-post.php>
order deny,allow
deny from all
</Files>
AuthUserFileの調べ方
path-check.php
という名前のPHPファイルに以下のコードを書き、サーバーにアップロードします。
(ファイル名は任意に変更してください。)
<?php
echo __FILE__;
?>
ブラウザから path-check.php
にアクセスすると、サーバー上の具体的なファイルパスが表示されます。
調べ終わったら、必ず path-check.php
を削除してください。
方法2. 更新から非表示まで10分〜1時間以上、間隔を開ける
更新から非表示までの時間を10分以上空けてもうまくいかない場合は、1時間以上間隔を開けてから再試行してください。
フックの更新時間の関係で、時間がかかることがあります。
方法3. キャッシュを消す
プラグインなどの影響でキャッシュが強く効いている場合があります。
キャッシュを消去するか、シークレットウィンドウで確認してみてください。
方法4. 他のプラグインと競合していないか確認する
「PublishPress Future」以外のプラグインを極力無効化して確認してください。
特に、キャッシュ系、セキュリティ系、投稿の予約系のプラグインは無効化して実験してみてください。
方法5. サイトヘルスでエラーが出ているか確認
上記を試してもうまくいかない場合は、エラーが出ている可能性が高いです。
管理画面のメニュー[ツール] > [サイトヘルス]で問題が出ていないか確認してください。
確認すると、
「予約したイベント フック名
の実行に失敗しました。サイトは動作しますが、予約した投稿や自動更新は正しく動作しないかもしれません。」というエラーメッセージが表示される場合があります。
「予約したイベント wp_delete_temp_updater_backups の実行に失敗しました。」の修正
次の定義を wp-config.php
に追加してみてください。
define('DISABLE_WP_CRON', true);
WP-CRON
は、WordPressサイトへのアクセス時にスケジュールされたタスクをチェックして実行します。
しかし、トラフィック(サイト訪問数)が少ないサイトでは、タスク(自動的に実行される、タスク管理の内部システム)が適時に実行されないことがあります。
逆に、トラフィックが多いサイトでは、WP-Cronの実行がサーバーリソースに負担をかけることがあります。
このような理由から、define('DISABLE_WP_CRON', true);
を使用することで、
WordPressの内部スケジューラーであるWP-CRON
を無効にし、サーバーのCronジョブでタスクを管理することができます。
これにより、サイトのパフォーマンスや信頼性を向上させることができます。
「予約したイベント expire_posts_acf の実行に失敗しました。」の修正
「wp_privacy_delete_old_export_files」など、上記以外のフックのエラーも使えることがあります。
- プラグイン「WP Crontrol」をインストール・有効化します。
このプラグインは、WordPress ウェブサイト上の cron イベントを制御できます。 - 「今すぐ実行」リンクをクリックして、正しく実行されているか確認します。
- フックの一時停止と再開:「このフックを一時停止」リンクをクリックし、再度有効にしてみてください。

上記の方法で解決しない場合は、
PHPやWordPressのバージョンアップを本格的に検討してください!