BOMBOLOM.COM

(wordpress) Excluir o administrador da lista de outros autores

Este é um post de José Lopes.

Ao utilizar o plugin Multiple Authors que permite descriminar no site os co-autores de um determinado artigo (post), para além do autor titular do artigo, deparei-me com o problema do administrador aparecer também, sempre que produzisse uma alteração ao artigo, como co-autor.

Este insere automaticamente um autor ao artigo se ele alterar alguma coisa ou gravar o artigo enquanto editado, incluíndo o administrador.

Este post mostra como alterar o plugin original para excluir o administrador da lista de co-autores, uma vez que o plugin não tem nenhuma opção para o efeito.

Com o plugin original, o administrador aparecia como um utilizador ou autor normal que a meu ver não tem muita lógica pois, com os poderes que detém e com as suas funções normais de gestão do site, é normal que proceda a pequenas alterações em artigos sem que com isso seja um verdadeiro co-autor.

Não confundir este administrador com um utilizador que tenha poderes de administrador, pois neste caso só estou a excluir o administrador com o nome admin.

A função do plugin txfx_other_authors(), que dá os outros autores (co-autores), é normalmente usada em conjunto com a função do Wordpress the_author(), pelo que está salvaguardado o caso do administrador ser proprietário de um artigo, aparecerendo nesse caso como autor principal.

Exemplo de utilização:

Artigo de <?php the_author(); txfx_other_authors(); ?>

Output:

Artigo de Manel, António e João

Voltando à questão deste post, proponho aqui duas alternativas de alteração, embore utilize a primeira.

Excluir completamente o administrador da lista de co-autores

Função original:

function txfx_other_authors($between=', ', $last=' e ', $before='', $after='') {
	global $post, $authordata;
	
	$other_authors = get_post_meta($post->ID, 'other_author');
	if ( count($other_authors) < 1 ) return;
	
	// initialize some vars
	$c = 0;
	$count = count($other_authors);
	
	// still here?  time to loop through the authors
	echo $before;
	foreach ($other_authors as $author) {
		$c++;
		$authordata = get_userdatabylogin($author);

		if ($count == $c) {
			echo $last;
		} else {
			echo $between;	
		}
		the_author();
		}

	echo $after;
}

Função alterada para excluir o administrador completamente:

function txfx_other_authors($between=', ', $last=' e ', $before='', $after='') {
	global $post, $authordata;
	
	$other_authors = get_post_meta($post->ID, 'other_author');
	if ( count($other_authors) < 1 ) return;
	
	// initialize some vars
	$c = 0;
	$count = count($other_authors);
	
	// still here?  time to loop through the authors
	echo $before;
	foreach ($other_authors as $author) {
		$c++;
		$authordata = get_userdatabylogin($author);
		if ($author=='admin') {continue;}
		else{
			if ($count == $c) {
				echo $last;
			} else {
				echo $between;	
			}
			the_author();
		}
	}
	echo $after;
}

Como se pode constatar a alteração é mínima, um simples if...else na linha 16 e 17, em que se verifica se o outro autor é o administrador e, caso o seja, o ciclo (loop) do if é quebrado com o continue.

Notar que o if...else original terá de passar para dentro do novo ciclo para a alteração funcionar, pelo que ainda é colocada uma chaveta na linha 24 para fechar o else.

Incluir opção para excluir ou não o administrador

Função alterada:

function txfx_other_authors($flagAdmin='off', $between=', ', $last=' e ', $before='', $after='') {
	global $post, $authordata;
	
	$other_authors = get_post_meta($post->ID, 'other_author');
	if ( count($other_authors) < 1 ) return;
	
	// initialize some vars
	$c = 0;
	$count = count($other_authors);
	
	// still here?  time to loop through the authors
	echo $before;
	foreach ($other_authors as $author) {
		$c++;
		$authordata = get_userdatabylogin($author);
		if ($flagAdmin='off'){
			if ($author=='admin') {continue;}
			else{
				if ($count == $c) {
					echo $last;
				} else {
					echo $between;	
				}
				the_author();
			}
		}
		else {
			if ($count == $c) {
				echo $last;
			} else {
				echo $between;	
			}
			the_author();
		}
	}
	echo $after;
}

Com esta função pode ligar ou desligar a visualização do administrador como co-autor, estando definido como defeito não o mostrar, e para mostrar basta declarar algo do tipo:

Artigo de <?php the_author(); txfx_other_authors('on'); ?>

Nota final

Apesar destas alterações funcionarem o resultado da formatação pode não ser o mais feliz, aparecendo uma ',' em vez de um 'e'. Isto é devido ao facto da lista de autores não estar na melhor ordem para nós, com o admin a ocupar a penúltima posição da lista.

Não creio que seja algo de muito escandaloso. Evitar isto requeria mais código para refazer o array sem o admin, a menos que o php já tenha uma função para excluir um elemento do array, função essa que não encontrei.

21.07.2007 | Ler mais | Comentários | Tags ,

Voltar à Página principal | Made with PyBlosxom