web-dev-qa-db-ja.com

制限付きページを404にリダイレクト

現在ログインしているユーザーがページを表示するための適切な許可を持っていない場合に404​​ページを表示する方法はありますか?私はPHPメソッドを探しています。

if( !current_user_can('administrator') ) { show_404(); exit(); }

リダイレクトを使用することを考えましたが、URLを同じにしたいと思います。

20
Evan Yeung

ヘッダーに次のコードを使用して404エラーを表示することができました。

<?php
  global $wp_query;
  $wp_query->set_404();
  status_header( 404 );
  get_template_part( 404 ); exit();
?>

分解するには:
$wp_query->set_404():これは404であることをwp_queryに伝えます。これはタイトルを変更します
status_header():HTTP 404ヘッダを送信します
get_template_part():404テンプレートを表示します

47
Evan Yeung

エラーメッセージが表示されたページを作成してから、そのページにユーザーをリダイレクトしないでください。これを実現する簡単な方法は次のとおりです。

404.phpファイルを開き、その先頭に次の行を追加します。

/**
 * Template Name: 404 Page
 */

404 Pageテンプレートでページを作成してください。その後、ユーザーをリダイレクトします。

if ( !current_user_can('administrator') ) {
    $404_page = get_permalink( $404_page_id );
    wp_redirect( $404_page );
    exit();
}

404リクエストにページを使用する理由は、次のとおりです。in WP 404ページは、実際には存在しない、WPを検索する必要があるページです その内容のすべて 404ページを返す前に、その作業はリソースの無駄です。ブログをより早く運営するのに役立つ可能性のある事前設定済みページを使用する。

2
Anh Tran

ユーザーの役割に基づいて、ユーザーにauthor.phpページへのアクセスを許可しないという同様の要件がありました。実際のページが読み込まれる前でも、template_redirectアクションを登録して確認し、404ページにリダイレクトします。

登録:

add_action( 'template_redirect', [ $this, 'handle_inactive_users']);

ハンドラ:

public function handle_inactive_users() {
    global $wp_query;
    if ( $wp_query->is_author() ) {
        $user = $wp_query->get_queried_object();
        if ( is_a( $user, \WP_User::class ) && $user->has_cap( 'inactive' ) ) {
            $wp_query->set_404();
            status_header( 404 );
            get_template_part( 404 );
            exit();
        }
    }
}

テンプレート部分の途中で次のコードスニペットのみを使用することを選択した場合、ページは既に部分的にレンダリングされている可能性があり、実際には404ページにリダイレクトされません。 template_redirectアクションでそれをやるほうがよい -

$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
0
Kalyan

このコードは実際に使われているテーマディレクトリの中のファイル 404.php に書くことができます(wp-content/themes /..../ 404.php)

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".get_bloginfo('url'));
exit();
?>

このコードは、ファイルの先頭から開始する必要があります(前に文字を付けずに)

オリジナルへのリンク: WordPressでホームページに404ページをリダイレクトする方法

0
Jan Čejka