Como listar posts privados no worsdpress
-
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.
-
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?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!
- Esta resposta foi modificada 6 anos, 5 meses atrás por Gustavo S. Serra.
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!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?Desculpa @gustavo-s-serra, como assim? Essa função só funcionaria para listas de coisas. Você está listando suas páginas em algum lugar?
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.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çãois_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.
- O tópico ‘Como listar posts privados no worsdpress’ está fechado para novas respostas.