WordPress で投稿ページを条件分岐で処理したい時

1月 16, 2024

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()

投稿・固定ページにかかわらず、サイトのフロントページが表示されている場合。true を返すのは、表示設定の「トップページの表示」として

  • 「最新の投稿」を設定している場合には、メインブログページが表示されるとき
  • 「固定ページ (以下を選択)」を設定している場合には、「フロントページ」として選択した固定ページが表示されるとき

ログインしていない時に、投稿ページをリダイレクトするコード

下記は、分岐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)

WordPress

Posted by iwadjp