投稿のステータスを確認したいのですが、特に投稿が下書きに設定されているのか、非公開にされているのかを知りたいのですが。
次のようなコードがあります。
if ('draft' != get_post_status() || is_user_logged_in()) {
$this->render();
}
else {
wp_redirect( site_url('404') );
exit;
}
投稿のステータスが下書きに設定されていないかどうか、またはログインしているかどうかを確認してから投稿をレンダリングするか、404ページにリダイレクトします。
何らかの理由で非公開で投稿された投稿がログインしていないユーザーに表示されるので、これを修正しようとしています。
投稿ステータスがprivate
の投稿をチェックするには、次のコマンドを実行します。
if (get_post_status() == 'private' && is_user_logged_in()) {
// it's private and user is logged in, do stuff
} elseif (get_post_status() == 'draft') {
// it's draft, do stuff
} else {
// it's something else, do stuff
}
または、現在の設定では、publishedpostsのみを表示することができます。
if (get_post_status() == 'publish') {
// it's published, do stuff
$this->render();
}
投稿ステータスの詳細については、 codexページ を参照してください。
問題はあなたの論理にあると思います。 ||
は、いずれかの条件が満たされるとレンダリングされることを意味します。特に最初の条件が満たされると、2番目の条件はチェックされなくなります。だからあなたのコードは以下のようになります -
if( !is_user_logged_in() ) {
return; // or do whatever you want to do if the user isn't logged in.
// Or these below things
// wp_redirect( site_url('404') );
// exit;
}
if ( 'private' === get_post_status()) {
// Only render private posts.
$this->render();
} else {
wp_redirect( site_url('404') );
exit;
}
そこで、ここで上で行ったことは、まずユーザーがログインしているかどうかを確認することです。ログインしていない場合は、そこから返却しています。次のif条件には達していません。これにより、ログインしていないユーザーがこの投稿を見るのを防ぐことができます。最初の条件がどのように満たされ、if
が次の条件をチェックしないのかをいくつかコーディングします。ログインしていないユーザーもあなたの投稿を見ることができます。今度は2番目のif
ブロックで、投稿ステータスをチェックしています。投稿のステータスがprivate
のみの場合はレンダリングされます。それ以外の場合はリダイレクトされます。
とにかく、ちょっとした提案で、
!==
ではなく!=
を、===
ではなく==
を使ってください。これらも型をチェックして厳密にチェックさせます。私のコードを見てください、私はこれらを使いました。
これが助けになることを願っています。