web-dev-qa-db-ja.com

カスタム投稿を追加すると「フォローしたリンクの有効期限が切れました」というメッセージが表示される

編集:それは話題外として閉じられているため、私は完全にこの質問を書き直しました。私の意見では、それは他の開発者を助けることができる2つの非常に関連性のある点を持っています、しかし、そのオリジナルの形では、これらの点はあまり明確ではありません。そのため、解決策とは無関係であることがわかっている背景情報をすべて切り出しました。私はまたそれが完全であるように私の答えを編集しました(以前は、いくつかの答えは質問への更新でした)。

カスタム投稿タイプ(CPT)を作成するプラグインを開発しています。私のCPTでは、カスタムメタデータにメタボックスを使用しています。メタボックスを表示する関数にnonceを作成します。カスタムメタデータを保存し、(check_admin_refererを介して)ナンスをチェックする関数は、save_postフックによって呼び出されます。 CPTの投稿を追加しようとすると、 Add New をクリックするたびに「フォローしたリンクの有効期限が切れました」と表示されます。

3
GeeC

"あなたがたどったリンクは期限が切れました"というメッセージはwp-includes/functions.phpの2607行目の関数wp_nonce_aysにあります。どうやら、メッセージは「本当によろしいですか?」から変更されました。 4.9.5にノンスチェックが失敗した場合、wp_nonce_ays関数はcheck_admin_refererによって呼び出されます。これは、このメッセージが使用されるWordpressコード内の唯一の場所です。したがって、このメッセージが表示された場合は、コードのどこかでノンスチェックが失敗していることがわかります。

カスタムメタデータを保存するときは、save_postフックではなくpost_updatedフックを使用してください。何らかの理由で、save_postフックはポスト作成ページが表示されるときに(つまり、何かが保存される前に)呼び出されます。この時点では、ナンスは作成されていないため、ナンスチェックは失敗します。

2
GeeC