最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Custom Post Type - Support "author" only for admins

programmeradmin1浏览0评论

I would like to set up a Custom Post Type which supports the author feature only for admins.

Other user roles may as well create, see and edit their own posts, but the admins should be able to switch a post's author.

So far I managed to display only their own posts to non-admins thanks to the pre_get_posts filter.

And this is how I define the CPT. What can I do now to restrict the supports author only to admin users?

// CPT
function prefix_setup_cpt(){
register_post_type('whatever',
    array(
    'labels'        => array(
                      'name'           => 'Whatever',
                      'singular_name'  => 'Whatever'
                      ),
    'supports'      => array(
                      'title',
                      'editor',
                      'author'  // <--- This enables author feature
                      )
....

I am not seeking for a coded answer to copy/paste, but for hints about hooks and other WordPress facts that help me achieve the desired functionality.

Thanks a lot for your attention.

I would like to set up a Custom Post Type which supports the author feature only for admins.

Other user roles may as well create, see and edit their own posts, but the admins should be able to switch a post's author.

So far I managed to display only their own posts to non-admins thanks to the pre_get_posts filter.

And this is how I define the CPT. What can I do now to restrict the supports author only to admin users?

// CPT
function prefix_setup_cpt(){
register_post_type('whatever',
    array(
    'labels'        => array(
                      'name'           => 'Whatever',
                      'singular_name'  => 'Whatever'
                      ),
    'supports'      => array(
                      'title',
                      'editor',
                      'author'  // <--- This enables author feature
                      )
....

I am not seeking for a coded answer to copy/paste, but for hints about hooks and other WordPress facts that help me achieve the desired functionality.

Thanks a lot for your attention.

Share Improve this question edited Feb 15, 2021 at 13:05 Álvaro Franz asked Feb 15, 2021 at 12:58 Álvaro FranzÁlvaro Franz 1,1001 gold badge9 silver badges31 bronze badges 2
  • 1 So you want that array to contain "author", but only when the user has the admin role? – Tom J Nowell Commented Feb 15, 2021 at 13:28
  • 1 @TomJNowell How did I not see it that way? Thanks a lot for your help sir! – Álvaro Franz Commented Feb 15, 2021 at 14:17
Add a comment  | 

1 Answer 1

Reset to default 2

Thanks to TomJNowell's help, this would be a possible working solution:

$supports = array(
    'title',
    'editor'
);
if(current_user_can('delete_plugins')){
    $supports[] = 'author';
}
register_post_type('whatever',
    array(
    'labels'        => array(
                      'name'           => 'Whatever',
                      'singular_name'  => 'Whatever'
                      ),
    'supports'      => $supports,
....
发布评论

评论列表(0)

  1. 暂无评论
ok 不同模板 switch ($forum['model']) { /*case '0': include _include(APP_PATH . 'view/htm/read.htm'); break;*/ default: include _include(theme_load('read', $fid)); break; } } break; case '10': // 主题外链 / thread external link http_location(htmlspecialchars_decode(trim($thread['description']))); break; case '11': // 单页 / single page $attachlist = array(); $imagelist = array(); $thread['filelist'] = array(); $threadlist = NULL; $thread['files'] > 0 and list($attachlist, $imagelist, $thread['filelist']) = well_attach_find_by_tid($tid); $data = data_read_cache($tid); empty($data) and message(-1, lang('data_malformation')); $tidlist = $forum['threads'] ? page_find_by_fid($fid, $page, $pagesize) : NULL; if ($tidlist) { $tidarr = arrlist_values($tidlist, 'tid'); $threadlist = well_thread_find($tidarr, $pagesize); // 按之前tidlist排序 $threadlist = array2_sort_key($threadlist, $tidlist, 'tid'); } $allowpost = forum_access_user($fid, $gid, 'allowpost'); $allowupdate = forum_access_mod($fid, $gid, 'allowupdate'); $allowdelete = forum_access_mod($fid, $gid, 'allowdelete'); $access = array('allowpost' => $allowpost, 'allowupdate' => $allowupdate, 'allowdelete' => $allowdelete); $header['title'] = $thread['subject']; $header['mobile_link'] = $thread['url']; $header['keywords'] = $thread['keyword'] ? $thread['keyword'] : $thread['subject']; $header['description'] = $thread['description'] ? $thread['description'] : $thread['brief']; $_SESSION['fid'] = $fid; if ($ajax) { empty($conf['api_on']) and message(0, lang('closed')); $apilist['header'] = $header; $apilist['extra'] = $extra; $apilist['access'] = $access; $apilist['thread'] = well_thread_safe_info($thread); $apilist['thread_data'] = $data; $apilist['forum'] = $forum; $apilist['imagelist'] = $imagelist; $apilist['filelist'] = $thread['filelist']; $apilist['threadlist'] = $threadlist; message(0, $apilist); } else { include _include(theme_load('single_page', $fid)); } break; default: message(-1, lang('data_malformation')); break; } ?>