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.