Suporte » Desenvolvendo com WordPress » Número de posts criados em Custom Type

  • Resolvido wpforever18

    (@wpforever18)


    Olá! Meu site possui vários autores que publicam posts apenas em “Custom Types” que eu criei. Não publicam no padrão “Posts”. Na opção Usuários do painel aparece corretamente todos os autores cadastrados no WordPress, mas na coluna “Posts” aparece 0, pois ali só exibe o número de posts publicadas no type “Post”, o que não é o meu caso. Já tentei achar funções para modificar isso e não achei. Alguém sabe como alterar esse padrão para o WordPress exibir o número de posts do usuário independente do Custom Type usado por ele? Obrigado.

Visualizando 6 respostas - 1 até 6 (de um total de 6)
  • Moderador Felipe Elia

    (@felipeelia)

    Olá,

    Não é possível alterar o valor daquela coluna sem modificar os arquivos do WordPress. Para isso você vai precisar remover aquela coluna e colocar outra no lugar.

    Eu não testei o código abaixo, mas ele deve pelo menos servir de começo para o que você quer fazer:

    
    /**
     * Altera as colunas da tela de lista de usuários
     *
     * @param array $columns Array com as colunas.
     * @return array         Array com as colunas alteradas.
     */
    function wpbr_86681_manage_users_columns( $columns ) {
    	// Remove a coluna padrão do WordPress.
    	unset( $columns['posts'] );
    	// Insere uma nova.
    	$columns['custom_posts_count'] = __( 'Posts' );
    	return $columns;
    }
    add_filter( 'manage_users_columns', 'wpbr_86681_manage_users_columns' );
    
    /**
     * Popula o valor da nova coluna
     *
     * @param string $value       Valor da célula até agora.
     * @param string $column_name Nome da coluna.
     * @param int    $user_id     ID do usuário.
     * @return string             Valor final da célula.
     */
    function wpbr_86681_manage_users_custom_column( $value, $column_name, $user_id ) {
    	if ( 'custom_posts_count' === $column_name ) {
    		$total_count = 0;
    		// Lista com os CPTs que devem ser contados. Altere para os slugs do SEU CPT.
    		$custom_post_types = [ 'slug_cpt_1', 'slug_cpt_2', 'slug_cpt_3' ];
    		foreach ( $custom_post_types as $cpt ) {
    			$cpt_count    = count_many_users_posts( [ $user_id ], $cpt );
    			$total_count += $cpt_count[ $user_id ];
    		}
    		return $total_count;
    	}
    	return $value;
    }
    add_action( 'manage_users_custom_column', 'wpbr_86681_manage_users_custom_column', 10, 3 );
    

    Não se esqueça de alterar o valor de $custom_post_types, ok? E também 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”.

    Obrigado, Felipe! Esse seu código funcionou perfeitamente. Era o que eu precisava para o painel. Obrigado mesmo. 🙂

    Aproveitando o seu conhecimento: você possui a função para exibir no site o número de posts criados por tal usuário? (O usuário só publica no “Custom Type)”.

    Com o código padrão ele só exibe 0, pois puxa os Posts ao invés do Post Personalizado.

    Moderador Felipe Elia

    (@felipeelia)

    Que bom que funcionou!

    Para exibir o número de posts criados você pode usar essa mesma função count_many_users_posts que eu usei no código. É só passar o ID do usuário dentro de um array como primeiro parâmetro e o nome do CPT como segundo parâmetro.

    Como sua dúvida foi respondida vou marcar o tópico como “resolvido”. Das próximas vezes você mesmo pode fazer isso, ok? Boa sorte!

    Obrigado novamente, Felipe. Mas se puder me indicar o código, por favor, como insiro a função para puxar automaticamente o ID do usuário e o CPT. Testei com alguns, mas não consegui. 🙁 Será que é possível o WordPress identificar automaticamente o ID e CPT do usuário nesta página e gerar o número de posts? Será na página do autor (author.php). Obrigado.

    Moderador Felipe Elia

    (@felipeelia)

    Olá,

    O ID do usuário na página do autor está disponível através da função get_queried_object_id(). O nome do CPT você vai precisar saber, são os mesmos nomes que você substituiu no outro código que eu passei.

    Deu tudo certo. Muito obrigado pela ajuda. 😀

Visualizando 6 respostas - 1 até 6 (de um total de 6)
  • Você deve estar conectado para responder a este tópico.