Su grandi siti con molti contenuti o su blog multiauthor può capitare la necessità di attribuire un post a più autori che hanno contribuito alla sua stesura o ad aggiornamenti successivi.

Per questa esigenza esiste un plugin molto ben fatto, mantenuto dal team vip.wordpress di Matt Muellenweg: Co-Authors Plus.

Una volta installato il plugin mette a disposizione un campo ‘autocomplete’ per selezionare gli autori a collegare l’articolo:co-author-plus-screen1

tutto molto semplice per la verità.

Vediamo come utilizzarlo nel caso vogliamo rendere anche sul front-end la paternità multiautore di un post.

il core di wordpress mette a disposizione i template_tag  the_author () e the_author_posts_link ()  per mostrare le informazioni relative all’autore (comunemente utilizzate nei files single.php e author.php), il plugin CO-author-plus aggiunge quelli per mostrare i co-autori con alcune funzioni che si trovano nel file template-tags.php della directory del plugin.

/**
 * Mostra solo il nome dei co-autori, senza link
 * Co-Authors Plus equivalente di the_author().
 *
 * @param string $between Delimitatore fra i coautori
 * @param string $betweenLast Delimitatore da mostrare fra gli ultimi 2 co-autori
 * @param string $before da mostrare prima dei co-autori
 * @param string $after da mostrare dopo i co-autori
 * @param bool $echo true=stampa o false=return Default: true
 */
function coauthors( $between = null, $betweenLast = null, $before = null, $after = null, $echo = true ){
    return coauthors__echo('display_name', 'field', array(
        'between' => $between,
        'betweenLast' => $betweenLast,
        'before' => $before,
        'after' => $after
    ), null, $echo );
}
 
/**
 * Mostra il link ai post dei co-autori.
 * Co-Authors Plus equivalente di the_author_posts_link() .
 *
 * @param string $between Delimiter that should appear between the co-authors
 * @param string $betweenLast Delimiter that should appear between the last two co-authors
 * @param string $before What should appear before the presentation of co-authors
 * @param string $after What should appear after the presentation of co-authors
 * @param bool $echo Whether the co-authors should be echoed or returned. Defaults to true.
 */
function coauthors_posts_links( $between = null, $betweenLast = null, $before = null, $after = null, $echo = true ){
    return coauthors__echo('coauthors_posts_links_single', 'callback', array(
        'between' => $between,
        'betweenLast' => $betweenLast,
        'before' => $before,
        'after' => $after
    ), null, $echo );
}
 
/**
 * Outputs the co-authors display names, with links to their websites if they've provided them.
 *
 * @param string $between Delimiter that should appear between the co-authors
 * @param string $betweenLast Delimiter that should appear between the last two co-authors
 * @param string $before What should appear before the presentation of co-authors
 * @param string $after What should appear after the presentation of co-authors
 * @param bool $echo Whether the co-authors should be echoed or returned. Defaults to true.
 */
function coauthors_links($between = null, $betweenLast = null, $before = null, $after = null, $echo = true ) {
    return coauthors__echo('coauthors_links_single', 'callback', array(
        'between' => $between,
        'betweenLast' => $betweenLast,
        'before' => $before,
        'after' => $after
    ), null, $echo );
}

 Integrare CO_Author-plus in un WP-theme

Per integrare il plugin in un tema, in teoria è sufficiente sostituire le chiamate alle funzioni originarie con quelle filtrate, racchiuse in un condizionale che, nel caso la funzione non sia disponibile, evita i problemi di fatal error php, ad esempio:

if ( function_exists( 'coauthors_posts_links' ) ) {//se esiste
    coauthors_posts_links();//funzione del plugin
} else {
    the_author_posts_link();//funzione autore singolo del CORE WP
}

Tuttavia questo approccio richiederà quasi certamente un’indagine più approfondita per temi più sofisticati. Ad esempio per twenty-fourteen occorrerà modificare la funzione twentyfourteen_posted_on() (wp-content/themes/twentyfourteen/inc/template-tags.php)

if ( ! function_exists( 'twentyfourteen_posted_on' ) ) :
/**
 * Print HTML with meta information for the current post-date/time and author.
 *
 * @since Twenty Fourteen 1.0
 */
function twentyfourteen_posted_on() {
   if ( is_sticky() && is_home() && ! is_paged() ) {
     echo '<span class="featured-post">' . __( 'Sticky', 'twentyfourteen' ) . '</span>';
	}

	// Set up and print post meta information.
if(function_exists('coauthor_posts_links') ):
	printf( '<span class="entry-date"><a href="%1$s" rel="bookmark"><time class="entry-date" datetime="%2$s">%3$s</time></a></span> <span class="byline"><span class="author vcard"><a class="url fn n" href="%4$s" rel="author">%5$s</a></span></span>',
     esc_url( get_permalink() ),
     esc_attr( get_the_date( 'c' ) ),
     esc_html( get_the_date() ),
     coauthors_posts_links( null, null, null, null, false )
	);
else:
     printf( ' ',
		esc_url( get_permalink() ),
		esc_attr( get_the_date( 'c' ) ),
		esc_html( get_the_date() ),
		esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ),
		get_the_author()
	);
endif;
}
endif;

In sostanza occorrerà andare a verificare come il nostro tema gestisce l’output delle informazioni relative all’autore del post e modificarle di conseguenza.

Definire la paternità coautore di un post può servire anche, in ambiente collaborativo, ad affiancare un collaboratore alle prime armi  ad un autore più esperto, senza modificare gli attributi e le capability dei ruoli utente.