web-dev-qa-db-ja.com

投稿および投稿の添付ファイルの作成者を設定する方法

私は私のWordPressインストールの一つに複数の著者アカウントを持っています。私はしばしば投稿を作成し、作者を別のアカウントに設定します。ただし、その投稿に画像をアップロードすると、その添付ファイルのページに作成者が私のアカウントとして表示されます。投稿者を投稿者に設定して、その投稿に関連するメディアに引き継ぐにはどうすればよいですか。

2
Ryan

あなたのテーマのfunctions.phpでこれを使ってください:

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

添付の投稿日も投稿の親の日付に変更するように@brasofiloの上記の解決策を拡張しました。

また、添付ファイルのアップロード時だけでなく、添付ファイルが編集されたときも同様です。これと同じ関数でedit_attachmentフィルターを使用できます。しかし、そうすると、wp_update_post関数が無限ループを引き起こし、PHPメモリエラーが発生するため、多くの検索の結果、困難な方法を見つけました。この無限ループに対する警告は、実際には Codex に記載されています。

解決策は、以下のようにフィルタを削除することです。

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