Codeworks Notes

 2019-08-19

 2020-02-11

Wordpress
バックエンド

ログインの有無で処理を分けたいとき

未ログインユーザーには見せたくないが、ログイン中には表示していたい、などの条件付けには is_user_logged_in() を使います。

<?php
// ログイン中のみ「ページの編集」を出す
if ( ! is_user_logged_in() ):
else:
?>

<a href="<?php echo get_edit_post_link(); ?>">ページの編集</a>

<?php endif; ?>

get_header() の前に置いて「ログインしてなかったらログインページに飛ばす」ということもできます。

テンプレートファイルに個別指定する方法

<?php
if ( ! is_user_logged_in() ):
  $login_redirect = "/wp-admin/wp-login.php/";
  wp_redirect($login_redirect);
  exit;
else:
?>

[ ログイン後に閲覧可能な内容 ]

<?php endif; ?>

functions.phpでサイト全体に適用する方法

<?php
// wp-login redirect
function require_login() {
   if ( ! is_user_logged_in() && ! preg_match( '/^(wp-login\.php|async-upload\.php)/', 
basename( $_SERVER['REQUEST_URI'] ) ) 
&& ! ( defined( 'DOING_AJAX' ) 
&& DOING_AJAX )  
&& ! ( defined( 'DOING_CRON' ) 
&& DOING_CRON ) ) {
        auth_redirect();
   }
}
add_action( 'init', 'require_login' );
?>