Como redirecionar usuários não logados para uma página específica?

16

Como redirecionar usuários não registrados que solicitam uma página / URL específica para outra página / URL e exibir uma mensagem como "somente para membros". Eu sei que é muito fácil codificar usando a função! Is_user_logged_in (), mas eu não sei como codificá-lo porque eu sou um novato no WordPress. Cuidado para me dizer o arquivo para colocar o código também.

user3187719
fonte

Respostas:

30

Aqui estão dois exemplos que você precisará modificar um pouco para funcioná-lo para suas necessidades específicas.

add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );

function redirect_non_logged_users_to_specific_page() {

if ( !is_user_logged_in() && is_page('add page slug or ID here') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {

wp_redirect( 'http://www.example.dev/page/' ); 
    exit;
   }
}

Coloque isso no arquivo de funções do tema filho, altere o ID da página ou slug e o URL de redirecionamento.

Você também pode usar código como este:

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

if ( is_page('slug') && ! is_user_logged_in() ) {

wp_redirect( 'http://www.example.dev/your-page/', 301 ); 
  exit;
    }
}

Você pode adicionar a mensagem diretamente à página ou, se desejar exibir a mensagem para todos os usuários não conectados, adicione-a ao código .

http://codex.wordpress.org/Function_Reference/wp_redirect

Brad Dalton
fonte
Obrigado pela resposta, eu fiz assim. add_action('template_redirect', 'redirect_to_specific_page'); function redirect_to_specific_page() { if ( is_page('http://mydomain.com/participate') && !is_user_logged_in()) { wp_redirect('http://mydomain.com/login', 301); exit; } }Mas não está funcionando.
user3187719
Use o ID de página ou lesma aqui, não o URL mydomain.com/participate codex.wordpress.org/Conditional_Tags
Brad Dalton
is_page ('participe')
Brad Dalton
7

Isso seria melhor:

if ( !is_user_logged_in() ) {
    auth_redirect();
} 

// continue as normal for authenticated users

O que isso faz é redirecionar o usuário para a página de login. Uma vez logado, o usuário é redirecionado de volta à página segura que estava tentando acessar inicialmente.

Documentação aqui:

https://codex.wordpress.org/Function_Reference/auth_redirect

Yahya Uddin
fonte
4

Como podemos dizer onde colocá-lo se você não nos disse o que e onde deseja exibi-lo? Mensagens inteiras? Páginas? Partes personalizadas de páginas? Desculpe ... Acho que minha bola de cristal não está funcionando hoje.

Como você é, e cito: "um novato no wordpress", você deveria aprender mais do que pedir uma resposta direta.

Quanto a onde você deve ler o link de referência 1. Isso informará em qual arquivo você deve inseri-lo.

Quanto a como fazer isso, você deve primeiro ler os links de referência 2 e 3.

No geral, deve ser algo como isto:

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'For members only';
}

Obviamente, o código acima precisa entrar em loop . Você pode construí-lo da maneira mais complexa ou simples que desejar. Por exemplo, em vez de texto simples, se não estiver logado, é possível exibir todo o formulário de inscrição, por exemplo, ou - como eu sugeriria - uma tela dividida em que o usuário pode efetuar login (já que o usuário pode ter uma conta, mas esqueceu de entrar) ou se inscrever (se ele não tiver um).

  1. Hierarquia de modelos
  2. Tags condicionais
  3. O laço

Adicionado após os comentários abaixo:

Para redirecionar o uso headercom o wp_login_url- novamente, verifique as referências 1 e 2 abaixo:

if ( is_user_logged_in() ) {
    the_content();
} else {
    header('Location: ' . wp_login_url());
}

Referência:

  1. Cabeçalho - PHP
  2. wp_login_url
Borek
fonte
Na verdade eu não sei a função no wordpress que retorna a URL solicitada ou o link permanente. E sobre a mensagem de exibição, deixe-a, eu quero apenas redirecioná-las quando elas solicitarem um determinado URL sem serem registradas.
user3187719
posso fazer isso com $ pagenow?
precisa saber é o seguinte
@ user3187719 editou minha resposta original e adicionou a solução para redirecionar. PS. $pagenow? Você está tentando matar uma mosca com um canhão com certeza vai funcionar, mas por que tão complexo? Mantenha simples. PS2: Aprenda PHP e WP Codex.
Borek
4

Você não pode redirecionar para uma página específica, mas todos os usuários não conectados serão redirecionados para a tela de logon.

<?php auth_redirect(); ?>

Referência do Wordpress: auth_redirect()

Apenas para mencionar outra solução.

MCG
fonte