Suporte » Desenvolvendo com WordPress » Redirecionar usuário autenticado de volta ao site

Visualizando 14 respostas - 1 até 14 (de um total de 14)
  • Bastante, me fez fuçar o codigo e me mostrou a função home_url() ^^

    Eu resolvi o problema editando o arquivo wp-login.php na parte:

    if ( ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' || $redirect_to == admin_url() ) ) {
    			// If the user doesn't belong to a blog, send them to user admin. If the user can't edit posts, send them to their profile.
    			if ( is_multisite() && !get_active_blog_for_user($user->ID) && !is_super_admin( $user->ID ) )
    				$redirect_to = user_admin_url();
    			elseif ( is_multisite() && !$user->has_cap('read') )
    				$redirect_to = get_dashboard_url( $user->ID );
    			elseif ( !$user->has_cap('edit_posts') )
    				$redirect_to = admin_url('profile.php');
    		}
    		wp_safe_redirect($redirect_to);
    		exit();

    E alterando $redirect_to = admin_url(‘profile.php’); para $redirect_to = home_url();

    Resultado:

    if ( ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' || $redirect_to == admin_url() ) ) {
    			// If the user doesn't belong to a blog, send them to user admin. If the user can't edit posts, send them to their profile.
    			if ( is_multisite() && !get_active_blog_for_user($user->ID) && !is_super_admin( $user->ID ) )
    				$redirect_to = user_admin_url();
    			elseif ( is_multisite() && !$user->has_cap('read') )
    				$redirect_to = get_dashboard_url( $user->ID );
    			elseif ( !$user->has_cap('edit_posts') )
    				$redirect_to = home_url(); //admin_url('profile.php');
    		}
    		wp_safe_redirect($redirect_to);
    		exit();

    Fica ai a dica pra vcs =)
    Vlw mesmo

    juliofmndes na verdade este não é o meio correto de fazer isso porque a cada atualização do WP vc terá que fazer tudo novamente.

    Para fazer isso adicione este código ao functions.php do seu tema, fará o mesmo efeito e sem precisar alterar nada no WP, mantendo assim mesmo depois de atualizar.

    //Se o usuário não está conectado redireciona ele para a tela de login
    function redirect_user_not_logged(){
    	if ( !is_user_logged_in() ) {
    		wp_redirect( esc_url( site_url('/wp-admin/' ) ) );
    	}
    }
    add_action('wp_head', 'redirect_user_not_logged');

    O código abaixo verifica se não está logado, então mostra o link de Login.
    Após logar, redireciona para o endereço que tentava visualizar.

    <?php if ( !is_user_logged_in() ) { ?>
          <p><a href="<?php echo wp_login_url( get_permalink() ); ?>" title="Login">Login</a></p>
    <?php } ?>

    Referência:

    Olá Lucas, é que no caso ele quer mesmo deixar o site privado somente a usuário registrados e assim como vc sugeriu os usuário não logados poderão ver o site.

    Não, o usuário não logado irá visualizar o link de Login. Ele então faz o login e volta para a mesma página com a exibição do conteúdo.
    Claro, após o fechamento do if, basta colocar o else com código para o conteúdo.

    Mas Lucas, onde então colocar este código que evite que o usuário veja o site se não está logado?

    Sua lógica está certa, mas funciona bem para um post, uma página ou para parte do conteúdo, mas não para o site por completo.

    Entendi o que você quiz dizer.

    A intenção do meu código é privatizar partes do site, como o conteúdo, deixando o título ou partes deste conteúdo, e assim, melhorando SEO.

    O seu código é o ideal para a privatização total. Porém, ainda não irá redirecionar o usuário, para a home_url();, após estar logado. Como o juliofmndes diz:

    [..] para redirecionar ao login, mas apos logar, ele sempre o redireciona para o painel e não para o site principal [..]

    É verdade Lucas tinha me esquecido disso, depois quando tiver um tempo vou pesquisar como fazer só por curiosidade.

    Eu tinha esse snippet e não lembrava. Ele redireciona o usuário, se for Assinante, após logar.

    add_action('admin_init', 'restringir_painel', 1);
    function restringir_painel(){
    	if ( current_user_can( 'subscriber' ) ) {
    		wp_redirect( home_url() );
    		exit;
    	}
    }

    Interessante Lucas, mas ai o usuário jamais consegue editar seu perfil.

    Acho que deve ter como fazer adicionando um redirect através de algum gancho da página de login.

    Então se não está logado vai para wp-admin, depois que se loga o redirect da tela de login leva o visitante devolta para o site, mas sem impedir que ele consiga editar seu perfil.

    Minha idéia seria utilizar seu código (mas aqui causa o erro de header, se utilizado no functions.php) com a condicional de !is_page('ID') e redirecionamento para página personalizada de login com shortcode. Cria-se então a página de login com o código que passei através de shortcode ou template.

    if ( !is_user_logged_in() && !is_page('22') ) {
    		wp_redirect( esc_url( site_url('/login/' ) ) ); exit;
    	}
    }

    O juliofmndes nem está mais seguindo o tópico hehe.
    Tá ficando uma POG.

    E também dá pra fazer com uma página personalizada feita exclusivamente para isso Lucas.

    E é verdade, ele não está mais seguindo, mas até que gostei de aprender mais alguns códigos, aprender sempre é bom.

    Bom fico por aqui, pois nem pretendo usar isso para meu uso, mas foi bom trocar idéias Lucas.
    abraços.

    Sim, através de Page Template / Modelo de Página.

    Também não utilizarei. Mas você conhece cliente, um dia vai acabar pedindo algo parecido e com esta troca de idéias, já terei algo em mente.

    Até a próxima.

Visualizando 14 respostas - 1 até 14 (de um total de 14)
  • O tópico ‘Redirecionar usuário autenticado de volta ao site’ está fechado para novas respostas.