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');
参考
- 条件の判定
http://wpdocs.osdn.jp/%E6%9D%A1%E4%BB%B6%E5%88%86%E5%B2%90%E3%82%BF%E3%82%B0#.E3.83.96.E3.83.AD.E3.82.B0.E3.83.9A.E3.83.BC.E3.82.B8 (リンク切れ 2024/1/16)