Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the ultimate-addons-for-gutenberg domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /sites/danielkossmann.com/files/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the hustle domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /sites/danielkossmann.com/files/wp-includes/functions.php on line 6114
Como utilizar count_user_posts() no WordPress (PHP) - Daniel Kossmann

Com a função PHP count_user_posts() você obtém o número de publicações de um usuário. Ela possui três parâmetros:

  1. $userid: número do ID do usuário – obrigatório;
  2. $post_type: nome do post type a ser contabilizado ou um array para quando houver mais de um – Opcional, com post como padrão;
  3. $public_only: Valor booleano para retornar somente posts públicos (aqueles com visibilidade diferente de “Privado”) – Opcional, com false como valor padrão.

Seguem abaixo alguns exemplos de uso:

<?php
$id_usuario = 1;

$numero_posts = count_user_posts( $id_usuario );
printf(
	__( 'O usuário com ID=%d publicou %d posts.', 'danielkossmann' ),
	$id_usuario,
	$numero_posts
);
// Um possível resultado será: O usuário com ID=1 publicou 20 posts.


$numero_posts_paginas = count_user_posts( $id_usuario, array( 'post', 'page' ) );
printf(
	__( '<br>O usuário com ID=%d publicou %d posts e páginas.', 'danielkossmann' ),
	$id_usuario,
	$numero_posts_paginas
);
// Um possível resultado será: O usuário com ID=1 publicou 45 posts e páginas.

$numero_posts_excluindo_privados = count_user_posts( $id_usuario, 'post', true );
printf(
	__( '<br>O usuário com ID=%d publicou %d posts, excluindo privados.', 'danielkossmann' ),
	$id_usuario,
	$numero_posts_excluindo_privados
);
// Um possível resultado será: O usuário com ID=1 publicou 19 posts, excluindo privados.Code language: PHP (php)

Quando testei os códigos acima, identifiquei uma incompatibilidade com o plugin PublishPress Authors que fazia a função count_user_posts() não respeitar o segundo e terceiro parâmetro. Se você estiver utilizando algum plugin que altera como os autores do WordPress funcionam, pode ser que encontre problemas também.

Listar todos os usuários do WordPress ordenados pelo número de posts e páginas publicados

Um possível uso da função count_user_posts() é listar todos os usuários que já publicaram posts e páginas, ordenando pela quantidade de publicações. Utilizei como base, o código de exemplo da função PHP get_users() para obter a lista com todos os usuários. Veja abaixo como ficou o código:

<?php
// Lista todos os usuários que já publicaram ordenados pelo número de publicações
$usuarios = get_users(
	array(
		'has_published_posts' => true,
		'order' => 'DESC',
		'orderby' => 'post_count',
		'fields' => array(
			'ID',
			'user_email'
		)
	)
);

// Verifica se foram encontrados usuários
if ( !empty( $usuarios ) ) {
	// Inicia uma lista ordenada
	echo "<ol>";
		// Seleciona cada um dos usuários
		foreach ( $usuarios as $usuario ) {
			// Obtem a quantidade de posts e páginas publicadas pelo usuário
			$posts = count_user_posts( $usuario->ID, 'post' );
			$paginas = count_user_posts( $usuario->ID, 'page' );
			// Inicia um item da lista
			echo "<li>";
				// Exibe as informações de forma que o conteúdo seja traduzível
				printf(
					__( 'O usuário %s publicou %d posts e %d páginas, totalizando %d publicações.', 'danielkossmann' ),
					$usuario->user_email,
					$posts,
					$paginas,
					$posts + $paginas
				);
			echo "</li>";
		}
	echo "</ol>";
} else {
	_e( 'Não foi encontrado nenhum usuário que já publicaram posts ou páginas.', 'danielkossmann' );
}Code language: PHP (php)


Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *