Suporte » Gerenciamento de conteúdo » Como listar posts privados no worsdpress

  • Resolvido Gustavo S. Serra

    (@gustavo-s-serra)


    Olá a todos. Estou tendo problemas em achar uma solução para o seguinte problema:
    Como listar posts privadas nos grids dentro das minhas páginas para meus usuários logados? o usuário logado consegue acessar o post através de um link mas não consigo lista-lo num grid de posts em uma página qualquer por exemplo.

Visualizando 11 respostas - 1 até 11 (de um total de 11)
  • bom dia @gustavo-s-serra,

    faz parte do código do wordpress não listar posts privados em páginas públicas. para mudar isso haveria 2 soluções,

    1) alterar o código do wordpress para permitir a solução que você deseja. aí ou você precisa ser desenvolvedor ou contratar um;

    2) como designer, eu usaria um plugin para restringir acesso ao conteúdo (Restrict Content). com isso, nessa página grid eu colocaria uma limitação de visibilidade apenas para usuários logados. um exemplo desse tipo de plugin seria

    https://br.wordpress.org/plugins/restrict-content/

    inclusive isso lhe permitiria criar duas páginas grid, uma para usuários não logados (onde inclusive poderia inserir um Call-to-action orientando para a página com mais link para logados) e outra página com grud completo para usuário logados.

    abraços e boa sorte!

    Ralden, Agradeço muito o esclarecimento.
    Será que alguém aqui no fórum poderia me orientar como alterar isso no código?

    Moderador Felipe Elia

    (@felipeelia)

    Oi @gustavo-s-serra e @ralden,

    Não sei se foi exatamente isso que o @ralden sugeriu, mas por favor nunca alterem diretamente os arquivos do WordPress. Vocês perderão as alterações na próxima atualização ou, pior, podem querer ficar sem atualizar, deixando o site inseguro.

    O WordPress fornece meios para que a gente possa alterar o seu comportamento através de códigos adicionais nos plugins ou no tema, sem ter que mexer nos seus próprios arquivos.

    @gustavo-s-serra, o comportamento padrão do WordPress já é listar os posts privados junto com os publicados se o usuário estiver logado. Como você está listando os posts? Você está usando algum plugin de construção de páginas como o Visual Composer, Elementor ou algo do tipo?

    Se você tiver como editar o functions.php do seu tema, pode tentar o código abaixo para ver se funciona:

    function wpbr79553_pre_get_posts( $query ) {
    	if ( ! is_admin() && is_user_logged_in() ) {
    		$query->set( 'post_status', array( 'publish', 'private' ) );
    	}
    }
    add_action( 'pre_get_posts', 'wpbr79553_pre_get_posts' );

    boa tarde @felipeelia e @gustavo-s-serra,

    opa, realmente me expressei mal. minhas desculpas. quando disse alterar o código não queria me referir ao core, mas desenvolver solução integrada ao WordPress, um complemento.

    e ótimo conhecimento adquirido sobre posts privados e usuários logados. havia recebido outro conhecimento há tempos atrás. bom para me atualizar.

    obrigado.

    Olá, @felipeelia

    A função funcionou perfeitamente para meus posts. Consegui lista-los como eu queria.
    Mas essa função não funciona para meus treinamentos do Learn Dash (LMS), que são um tipo de post. Você saberia me orientar como fazer o mesmo com essas publicações?

    Obrigado pela ajuda até agora!

    Moderador Felipe Elia

    (@felipeelia)

    Oi @gustavo-s-serra,

    Como o Learn Dash é pago, a gente não consegue te ajudar por aqui (mais explicações no nosso texto de boas vindas. Tente o suporte do próprio Learn Dash, de repente eles conseguem te ajudar.

    Não se esqueça de voltar caso tenha mais alguma dúvida ou, se for o caso, para marcar seu tópico como “resolvido”.

    Ok, @felipeelia e @ralden!
    Já ajudaram. Obrigado!

    @felipeelia,

    Como estender essa função as páginas também?
    Entendo que o plugin seja pago mas vc poderia me ajudar no que devo substituir para fazer essa função funcionar para meus cursos também?

    Moderador Felipe Elia

    (@felipeelia)

    Desculpa @gustavo-s-serra, como assim? Essa função só funcionaria para listas de coisas. Você está listando suas páginas em algum lugar?

    @felipeelia,

    Me desculpe eu só estou tentando entender como a função funciona para tirar idéias de como fazer isso para meus cursos. Pensei que se eu visse como funciona isso para as paginas entenderia o que devo buscar/alterar para resolver meu problema com os cursos.
    O suporte esta me indicando utilizar plugins mas isso não resolve meu problema.

    Moderador Felipe Elia

    (@felipeelia)

    Ah sim, eu explico:

    Cada busca do WordPress por conteúdo a gente chama de query. Com o endereço que você acessou o WordPress executa uma query e exibe uma página, um post ou uma lista de coisas. Além disso é possível executar queries personalizadas como uma lista de posts relacionados (o WP executa uma query para saber qual é o post principal, depois executa outra query para pegar os posts relacionados a esse post).

    Essa função é executada para transformar essas queries. Antes que elas sejam executadas a query passa por ela. Dentro da função, testamos se estamos no Painel ou não (com a função is_admin()) e se o usuário está ou não logado (com a função is_user_logged_in()). Se o usuário não está no Painel mas está logado, alteramos a query para que o WordPress passe a considerar também os conteúdos com status ‘private’).

    O problema que você terá que lidar é como o plugin interage com as queries do WordPress. Infelizmente existem muitas formas e várias são muito específicas para que a gente tente um palpite.

    O único teste que posso te recomendar é trocar a linha
    add_action( 'pre_get_posts', 'wpbr79553_pre_get_posts' );
    por
    add_action( 'pre_get_posts', 'wpbr79553_pre_get_posts', 9999 );

    Isso vai fazer com que a nossa alteração seja executada “mais tarde”, isto é, com uma chance maior de sobrescrever alguma coisa que o plugin esteja fazendo.

Visualizando 11 respostas - 1 até 11 (de um total de 11)
  • O tópico ‘Como listar posts privados no worsdpress’ está fechado para novas respostas.