このフックで特定のカテゴリのユーザーをリダイレクトしようとしているim:
// Show app-data posts only to app users
function user_redirect()
{
if ( is_category( 'app-data' ) ) {
$url = site_url();
wp_redirect( $url );
exit();
}
}
add_action( 'the_post', 'user_redirect' );
しかし、それは動作していないと私は理由がわからない。ユーザーがカテゴリを参照している場合はリダイレクトします。ユーザーがカテゴリまたはそのカテゴリの投稿を参照している場合はリダイレクトします
あなたのコードには一つの大きな問題があります... HTMLコンテンツが既に送信された後にリダイレクトすることはできません...そのようなリダイレクトは無視されます...
では、なぜあなたのコードは間違っているのでしょうか。 the_post
フックのため。このフックはpostのオブジェクトが設定されたときに起動します。そのため、通常はループ内にあり、リダイレクトするには遅すぎます。
別のフックを使ってください。
これが 典型的なリクエストの間に起動された利用可能なフックのリストです 。
リダイレクトを行うための最良の方法の1つ( およびそのために一般的に使用される )はtemplate_redirect
です。ご覧のとおり、ヘッダーを取得する直前に起動されたので、すべてがすでに設定されています。
function redirect_not_app_users_if_app_data_category() {
if ( (is_category( 'app-data' ) || in_category('app-data'))&& ! is_user_logged_in() ) {
wp_redirect( home_url() );
die;
}
}
add_action( 'template_redirect', 'redirect_not_app_users_if_app_data_category');
フック名the_postをtemplate_redirectに変更します。
add_action( 'template_redirect', 'wpse_restrict_catgorey');
function wpse_restrict_catgorey(){
if( ! is_user_logged_in() && is_category( 'app-data' ) ) {
wp_redirect( home_url() );
exit;
}
}