web-dev-qa-db-fra.com

Comment définir l'auteur pour les pièces jointes

J'ai plusieurs comptes d'auteur sur l'une de mes installations WordPress. Souvent, je vais créer un article et définir l'auteur comme un compte différent. Cependant, lorsque je télécharge des images dans ce message, leur page de pièce jointe répertorie l'auteur comme étant mon compte. Comment puis-je définir l'auteur pour les publications et le transférer aux médias associés à cette publication?

2
Ryan

Utilisez ceci dans le functions.php de votre thème:

add_filter( 'add_attachment', 'wpse_55801_attachment_author' );

function wpse_55801_attachment_author( $attachment_ID ) 
{
    $attach = get_post( $attachment_ID );
    $parent = get_post( $attach->post_parent );

    $the_post = array();
    $the_post['ID'] = $attachment_ID;
    $the_post['post_author'] = $parent->post_author;

    wp_update_post( $the_post );
}
1
brasofilo

J'ai étendu la solution ci-dessus de @brasofilo pour modifier également la date de publication de la pièce jointe en date du parent de publication.

Et non seulement lors du téléchargement de la pièce jointe, mais également lorsqu'une pièce jointe est modifiée. Vous pouvez utiliser le filtre edit_attachment avec la même fonction. Cependant, lorsque vous faites cela, la fonction wp_update_post provoque une boucle infinie et conduit à des erreurs de mémoire PHP. Un avertissement pour cette boucle infinie est en fait mentionné dans le Codex .

Une solution consiste à supprimer les filtres, comme suit:

function wpse_55801_attachment_author( $attachment_ID ) {

    remove_filter('add_attachment', 'wpse_55801_attachment_author');
    remove_filter('edit_attachment', 'wpse_55801_attachment_author');

    $attach = get_post( $attachment_ID );
    $parent = get_post( $attach->post_parent );

    $the_post = array();
    $the_post['ID'] = $attachment_ID;
    $the_post['post_author'] = $parent->post_author;
    $the_post['post_date'] = $parent->post_date;

    wp_update_post( $the_post );

    add_filter( 'add_attachment', 'wpse_55801_attachment_author' );
    add_filter( 'edit_attachment', 'wpse_55801_attachment_author' );
}   

add_filter( 'add_attachment', 'wpse_55801_attachment_author' );
add_filter( 'edit_attachment', 'wpse_55801_attachment_author' );
2
RemBem