0

我将在我的 wordpress 中创建名为“Food”的新帖子类型,并且我需要将此帖子类型中的任何新帖子添加到我网站中的用户注册中。

所以当我在我的帖子类型“食物”中添加新帖子时,我需要为哪个用户选择这个帖子。

怎么能做到这一点。

谢谢

4

1 回答 1

0

你今天很幸运,因为我目前正在做你所要求的:)

wordpress 只显示角色为author. 基本上你必须删除authordiv元框,添加另一个与原始 html 相同的元框authordiv,找到具有正确角色/能力的用户并构建一个选择,所以下面的代码是我的实现,你需要修改它以适应你的需求:

// add authordiv if user is admin or is allowed to change author of post !important
global $current_user;
if(in_array(array('administrator','change_post_author'), $current_user->allcaps))
  add_meta_box('authordiv', 'Change Author', 'my_add_author_metabox', get_post_type(), 'side');

// make new author metabox that contains users that can manage this cpt
function my_add_author_metabox()
{
  $post_type_name = isset($_GET['post_type']) ? $_GET['post_type'] : get_post_type($_GET['post']);
  $roles = get_editable_roles();
  // i unset these as they are never used
  unset(
    $roles['administrator'],
    $roles['contributor'],
    $roles['author'],
    $roles['editor'],
    $roles['subscriber']
  );

  // get role that manages this cpt
  $cpt_name = '';
  $cap = 'edit_' . $post_type_name;
  foreach($roles as $role_name => $args){
    if(array_key_exists($cap, $args['capabilities'])){
      $cpt_name = $role_name;
      break;
    }
  }

  // get users that can manage this cpt
  global $post;
  $users = get_users('role=' . $cpt_name);
  $author_id = $post->post_author;
  $select = '
<label class="screen-reader-text" for="post_author_override">Change Author</label>
<select name="post_author_override" id="post_author_override" class="">
';
  foreach($users as $user){
    if($user->ID == $author_id)
      $select .= "<option value=\"{$user->ID}\" selected=\"selected\">{$user->display_name}</option>";
    else
      $select .= "<option value=\"{$user->ID}\">{$user->display_name}</option>";
  }

  $select .= '</select>';
  echo $select;

}

现在在我的cpt我不支持author,但如果你这样做,那么要么author从你的supports时候删除register_post_type()要么使用

remove_meta_box('authordiv');

希望它对你有用,它对我有用。可能有更好的,如果你遇到过,把它发回这里:)

于 2013-10-13T12:36:48.933 回答