web-dev-qa-db-ja.com

ログインしたユーザーとは異なるユーザーとしてコメントを投稿する

"Comments"セクション(edit-comments.php)のWPバックエンドでコメントに返信するとき、私はログインユーザーとして返信を投稿することしかできません。 "新規投稿の追加"セクション(post-new.php)のように、投稿を許可されているすべてのユーザーのドロップダウンリストのように、特定のユーザーを選択することはできますか?

3
user1706680

はい、コメントフォームにユーザー選択フィールドを追加します。

add_action('comment_form_after_fields', function(){

  // allow only users who can moderate comments to do this
  if(!current_user_can('moderate_comments'))
    return;

  $user = wp_get_current_user();

  wp_dropdown_users(array(
    'name'     => 'alt_comment_user',
    'selected' => $user->ID,
  ));

});

フォームが処理されたら、ユーザーが選択されているかどうかを確認し、コメントデータをデータベースに挿入する前に変更します。

add_filter('preprocess_comment', function($input){

  if(current_user_can('moderate_comments') && isset($_POST['alt_comment_user'])){    

    $user = get_user_by('id', (int)$_POST['alt_comment_user']);

    $my_fields = array(
      'comment_author'       => empty($user->display_name) ? $user->user_login : $user->display_name,
      'comment_author_email' => $user->user_email,
      'comment_author_url'   => $user->user_url,
      'user_ID'              => $user->ID,
    );

    // escape for db input
    foreach($my_fields as &$field)
      $field = $GLOBALS['wpdb']->escape($field);

    $input = $my_fields + $input;   
  }  

  return $input;
});

ref: wp_dropdown_users

2
onetrickpony