以编程方式允许非作者编辑基于帖子的自定义元字段

时间:2020-03-18 作者:brandonjp

用户A编写并发布了一篇文章。在那篇文章中,用户A选择用户B作为“管理者”(一个自定义元字段)。

我如何允许用户B编辑他们被选为“经理”的任何帖子?

我对代码很熟悉。正在寻找一种方法,以编程方式钩住检查谁可以编辑帖子。

1 个回复
最合适的回答,由SO网友:Pat J 整理而成

正在查看current_user_can()\'s文档,我看到它使用WP_User::has_cap(). 因此,如果您的代码(或WP核心代码)使用current_user_can( \'edit_post\', $post->ID ) 要确定当前用户是否可以编辑当前帖子,可以使用user_has_cap 过滤器(调入WP_User::has_cap()):

add_filter( \'user_has_cap\', \'wpse360937_allow_manager\', 10, 4 );
function wpse360937_allow_manager( $allcaps, $caps, $args, $user ) {
    // Bail out if we\'re not asking about a post:
    if ( \'edit_post\' != $args[0] ) {
        return $allcaps;
    }
    // Bail out for users who can already edit others posts:
    if ( $allcaps[\'edit_others_posts\'] ) {
        return $allcaps;
    }
    // Bail out if the user is the post author:
    if ( $args[1] == $post->post_author ) {
        return $allcaps;
    }
    $post_id = $args[2]; 
    $manager_id = get_post_meta( $post_id, \'manager\', true );
    // Assumes the meta field is called "manager" 
    // and contains the User ID of the manager.
    if ( $manager_id == $user->ID ) {
        $allcaps[ $caps[0] ] = true;
    }
    return $allcaps;
}
(代码部分基于User Contributed Notes on the user_has_cap filter docs.)

相关推荐

何时使用emoveEditorPanel()

我想删除post editor侧栏中的讨论面板removeEditorPanel().我正在努力做到以下几点:const { removeEditorPanel } = wp.data.dispatch( \'core/edit-post\' ) removeEditorPanel( \'discussion-panel\' ) 然而,我得到一个错误removeEditorPanel 没有定义,因为我想,core/edit-post 尚未加载。是否有一个事件或挂钩,我可以使用它来知道帖子编