Redirecionar página restrita para 404

19

Existe uma maneira de mostrar uma página 404 se o usuário logado não tiver a permissão correta para visualizar a página? Eu estou procurando um método PHP, algo como

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

Eu pensei em usar um redirecionamento, mas gostaria de manter o URL da mesma forma.

    
por Evan Yeung 04.08.2011 / 08:01
fonte

4 respostas

47

Consegui exibir um erro 404 usando o seguinte código no meu cabeçalho.

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

Para dividi-lo:
$wp_query->set_404() : informa ao wp_query que este é um 404, isso altera o título para% status_header() : envia um cabeçalho HTTP 404 para get_template_part() : exibe o modelo 404

    
por Evan Yeung 28.08.2011 / 16:40
fonte
2

Por que você não cria uma página que mostra uma mensagem de erro e redireciona o usuário para essa página? Aqui está uma maneira simples de conseguir isso:

Abra o arquivo 404.php e adicione essas linhas ao topo:

/**
 * Template Name: 404 Page
 */

Crie uma página com 404 Page template. Em seguida, redirecione os usuários:

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

O motivo pelo qual você deve usar uma página para a solicitação 404 é: na página WP 404, na verdade, é uma página que não existe , o WP precisa pesquisar todo o seu conteúdo antes de retornar a página 404 e esse trabalho é um desperdício de recursos. Usando uma página pré-configurada que pode ajudar você a executar seu blog mais rapidamente.

    
por Anh Tran 04.08.2011 / 08:39
fonte
0

Você pode escrever este código para o arquivo 404.php no diretório de temas realmente usados (wp-content / themes / .... / 404.php) :

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

Este código deve começar do começo do arquivo (sem nenhum caractere antes) .

Link para o original: Como redirecionar sua página 404 para a Home Page no WordPress

    
por Jan Čejka 05.06.2017 / 16:39
fonte
0

Eu tinha um requisito semelhante em que não deveria permitir que os usuários acessassem a página author.php com base na função em que o usuário estava. Registrei a ação template_redirect para fazer minhas verificações e redirecionar para a página 404 antes mesmo de a página ser carregada .

Registro:

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

Manipulador:

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

Se você optar por usar somente o seguinte trecho de código no meio da parte do modelo, a página pode já ter sido processada parcialmente e você não é realmente redirecionado para uma página 404. Então é melhor fazer isso na template_redirect action -

$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
    
por Kalyan 26.09.2017 / 18:52
fonte