非公開固定ページ・投稿を直接表示した時の404.phpの内容を変更する

非公開に設定した投稿や固定ページを表示すると404.phpが表示されます。
他にも下書き投稿、予約投稿なども404.phpが表示されます。
404.phpで「投稿がありません」と表示されるのを、投稿のステータスに合わせて表示をカスタマイズしました。

特に「非公開」記事の場合は、ログインが必要なことを表示して、ログインページにリンクしリダイレクト先に該当の記事のURLを設定しました。

記事のIDと記事のステータスを返します。
function.php
[php]//非公開記事の404表示用 function my_get_404_status( ) { global $wp_query; if ( is_404() ) { if ( $wp_query->found_posts == 0 ) { return false; } /* 固定ページ */ if( isset( $wp_query->queried_object->post_status ) ) { return array($wp_query->queried_object->ID,$wp_query->queried_object->post_status); } /* 投稿 */ if ( isset( $wp_query->request ) ) { $id = $wpdb->get_var( $wp_query->request ); return array($id,get_post_status( $id )); } } }[/php]
記事のステータスに合わせた表示の分岐
404.php
[php]%1$s'; if ( list($postid,$status)= my_get_404_status() ) : switch( $status ) : case( 'draft'): printf( $my_status_html, 'この投稿は、草稿です。公開していません' ); break; case( 'pending'): printf( $my_status_html, 'この投稿は、レビュー待ちです。公開していません' ); break; case( 'future'): printf( $my_status_html, 'この投稿は、近日公開予定です' ); break; case( 'private'): printf( $my_status_html, 'この投稿は、非公開です。ログインしてください。' ); echo '

この記事はログインしなければ表示できない会員のみ閲覧可能な記事です。

'; break; endswitch; ?>

お探しのページが見あたりません。
申し訳ございませんが、記事が削除されたかURLが変更になった可能性があります。

[/php]  

※参考にさせて頂きました。
404.php のカスタマイズ
Comments

コメントする