Carregando postagens associadas somente ao usuário logado na página de posts recentes

4

Prezados capitães do Wordpress,

Eu me deparei com um problema e estou buscando ajuda.

O que estou tentando criar é um portal do cliente em que o usuário conectado verá apenas as postagens associadas ao nome de usuário. Seria ótimo se isso funcionasse na página de posts recentes (ou índice .. A página que um usuário pode ver primeiro quando se conectou, com todos os posts recentes). Eu não tenho nenhuma página estática, além de uma página de contato (caso isso seja importante).

Parece uma solução muito fácil, mas tentei todos os plug-ins que consegui encontrar. Por exemplo, um dos plugins que eu tentei em 'User Specific Content' - mas isso não é exatamente o que eu estou procurando, pois bloqueia o conteúdo apenas quando clicado no post (para abrir o post atual). O que eu estou procurando é uma maneira de mostrar apenas os posts acessíveis para o usuário logado na página principal.

Há apenas um autor - o administrador, e há muitos usuários (clientes, configurados como inscritos) que devem apenas ver as postagens individuais alocadas a seu nome de usuário individual. Qual é a maneira mais fácil de fazer isso? Talvez eu pudesse apenas consultar as postagens que estão na categoria do usuário? (Eu publiquei cada post na categoria com o nome do cliente). Espero que isso esclareça o meu problema e o que estou tentando alcançar.

Por favor, não hesite em pedir mais informações se não for suficientemente claro!

Obrigado antecipadamente!

    
por Alex Broere 01.09.2015 / 13:02

1 resposta

5

Você deve ser capaz de obter o ID de usuário atual conectado e usar pre_get_posts para alterar a consulta principal na página inicial / blog para mostrar apenas postagens daquele usuário específico. Pelo que entendi, você está falando especificamente sobre autores.

Você também pode verificar os recursos do usuário, assim como os assinantes simples não verão nenhuma postagem no blog / homepage, pois não podem criar postagens.

Uma ação pre_get_posts muito simples se parecerá com algo assim: ( OBSERVAÇÃO: O seguinte não foi testado)

add_action( 'pre_get_posts', function ( $q )
{    
    if ( is_user_logged_in() ) { // First check if we have a logged in user before doing anything
        if (    $q->is_home() // Only targets the main page, home page
             && $q->is_main_query() // Only targets the main query
        ) {
            // Get the current logged in user
            $current_logged_in_user = wp_get_current_user();

            // Set the logged in user ID as value to the author parameter
            $q->set( 'author', $current_logged_in_user->ID );
        }
    }    
});

EDITAR

Nos comentários, parece que cada usuário tem uma categoria com o mesmo nome e essa categoria específica é anexada a uma postagem

Para acomodar isso, você precisará fazer o seguinte

  • Como acima, obtenha o usuário logado atual

  • Você precisará usar as informações do usuário atual que corresponderão à categoria. Por exemplo, como exemplo, se 'display_name' == 'category name' , se o nome de exibição do usuário for Jane Doe , o nome da categoria atribuído ao nome também será chamado Jane Doe

  • No exemplo acima, precisamos obter a categoria por nome para que possamos obter o ID da categoria. Estaremos usando get_term_by() , que pode ser usado com base em taxonomias como category ou taxonomias personalizadas

  • Podemos então seguir em frente e fazer o mesmo que na resposta original

Você pode fazer algo assim; ( eu comentei o código para que você possa entender e seguir melhor )

add_action( 'pre_get_posts', function ( $q )
{    
    if ( is_user_logged_in() ) { // First check if we have a logged in user before doing anything
        if (    $q->is_home() // Only targets the main page, home page
             && $q->is_main_query() // Only targets the main query
        ) {
            // Get the current logged in user
            $current_logged_in_user = wp_get_current_user();
            /**
             * We will now get the term/category object from the user display_name
             * You will need to make sure if this corresponds with your term/category
             * If not, use the correct info to match
             */
            $term = get_term_by( 
                'name', // We will get our term by name as term name == user display_name. Change as needed
                $current_logged_in_user->display_name, // Our value to look for will be user display_name
                'category' // The taxonomy the term belongs to. category is the build in taxonomy
            );
            if ( $term ) { // Only filter the main query if we actually have a term with the desired name
                $q->set( 'cat', $term->term_id ); // Filter the posts to only show posts from the desired category
            }
        }
    }    
});
    
por Pieter Goosen 01.09.2015 / 14:19