失敗の原因
WordPressのcronは本来の意味でのcronではなく擬似cronを使用しているからです。
擬似cronは指定の頻度ではなく、ユーザーの訪問にトリガーされ、実行されます。
つまり、ユーザーがサイトにアクセスするたびに、WordPressは、実行する必要のある保留中のcronジョブがあるかどうかを確認し実行します。
basic認証があるとこの擬似cronファイルにアクセスしないので失敗します。
キャッシュ系プラグインはWPファイル読み込まないので実行されないので失敗します。
解決策
そこで主な解決策は下記3つです。
1.プラグインを使用する
一番簡単なやり方です。
上記プラグインどれかを選び ダウンロード→インストール→有効化
で完了です。
2.basic認証を外す又はサーバIPのみ許可してあげる
basic認証があるとwp-cron.phpにアクセス時に認証出来ないので投稿が失敗します。
なので、サーバのIPのみ許可させると直ります。
<Files wp-cron.php>
order deny,allow
deny from all
Allow from xxx.xxx.xxx.xxx #WordPress設置サーバのIP
Satisfy Any
</Files>
3.代替Cronを使う
WordPressには予約投稿がうまく動作しない時のために、「代替Cron」という仕組みが用意されているようです。
ルートディレクトリにある「wp-config.php」に以下の記述を追加するだけで有効になります。
define('ALTERNATE_WP_CRON', true);
※上記の1.のプラグインと同時に使うと効かない場合があります。
参考サイト
https://oxynotes.com/?p=7309
https://ja.wordpress.org/support/article/editing-wp-config-php/#%e4%bb%a3%e6%9b%bf-cron