WordPress で投稿ページを条件分岐で処理したい時
WordPressの投稿(ブログ)ページでは、自動的に記事一覧が表示されます。これが、WP-Membersの標準機能ではブロックできず、ログインしていない時も表示されてしまいます。
これをブロックするためのカスタマイズです。
投稿ページを判断するための分岐
ホームページと投稿が、どのように設定されているかによって、分岐を判断する状況が変わります。
ホームページと投稿の組み合わせ全てに対応するには、下記の順番で条件判断をする必要があるようです。
if ( is_front_page() && is_home() ) {
// 1.デフォルトホームページ (最新の投稿を含む)の時
} elseif ( is_front_page() ) {
// 2.固定ペーシを使ったホームページで投稿(ブログ)ペジなしの時
} elseif ( is_home() ) {
// 3.固定ホームページとブログページの時
} else {
// それ以外
}
メインページ is_home()
メインブログページが表示されている場合。これは、サイトにある時系列のブログコンテンツを表示するページです。もしあなたがフロントページに固定ページを設定していた場合(以下を参照)、Administration > Settings > Readingであなたが「投稿ページ」として設定したページでのみ、trueになります。
フロントページ is_front_page()
ログインしていない時に、投稿ページをリダイレクトするコード
下記は、分岐3の場合のサンプルコードになります。ホームページと投稿の設定は変える予定がないため、一つの条件判断だけで問題ありません。
// ログインしていない時は、投稿一覧ページはトップ画面にリダイレクトします。WP-Menmbersで制限を掛けても、投稿一覧が表示されるためです。
function un_logged_in_user_redirect() {
if( ! is_user_logged_in() && is_home() ) {
wp_redirect( '/top' );
exit();
}
}
add_action( 'template_redirect','un_logged_in_user_redirect');
おまけ:管理者以外がログイン時に、管理バーを表示させないコード
// 管理者以外がログイン時に、管理バーを表示させない。管理バーが出ると、ユーザ情報を更新できてしまうためです。
function my_function_admin_bar($content) {
return ( current_user_can("administrator") ) ? $content : false;
}
add_filter( 'show_admin_bar' , 'my_function_admin_bar');