能够编辑自己的帖子,而不是其他帖子

时间:2013-12-11 作者:Netizen

什么是允许用户编辑自己的帖子而不是其他帖子的功能?我试图让帖子作者只在他们自己的帖子上使用插件功能。

访问该选项的权限应仅限于特定的帖子作者,甚至连编辑都无权访问。在帖子作者旁边,只有管理员才有访问权限。

插件的代码有:

function init()
{
    // must be logged in
    if( is_user_logged_in() )
    {
        // actions
        add_action(\'admin_head\', array($this,\'admin_head\'));
        add_action(\'admin_menu\', array($this,\'admin_menu\'));


        add_action(\'wp_enqueue_scripts\', array($this,\'wp_enqueue_scripts\'));
        add_action(\'wp_head\', array($this,\'wp_head\'));
        add_action(\'wp_footer\', array($this,\'wp_footer\'));
        add_action(\'wp_ajax_live_edit_update_width\', array($this, \'ajax_update_width\'));
    }
}
我编辑了插件文件以更改功能(第79行)。

    function init()
    {
        // must be logged in
if( is_user_logged_in() && current_user_can(\'author\') || current_user_can(\'administrator\'))
        {
            // actions
            add_action(\'admin_head\', array($this,\'admin_head\'));
            add_action(\'admin_menu\', array($this,\'admin_menu\'));


            add_action(\'wp_enqueue_scripts\', array($this,\'wp_enqueue_scripts\'));
            add_action(\'wp_head\', array($this,\'wp_head\'));
            add_action(\'wp_footer\', array($this,\'wp_footer\'));
            add_action(\'wp_ajax_live_edit_update_width\', array($this, \'ajax_update_width\'));
        }
    }
现在,只有文章作者和管理员可以访问它。但我想替换current_user_can(\'author\') 使作者能够编辑自己的帖子,而不是其他人的帖子。这些功能包括edit_postsedit_published_posts 允许访问所有帖子。

有谁能告诉我一个能让用户编辑自己的帖子而不是其他帖子的功能吗?也请告诉我我使用的方式是否正确。if( is_user_logged_in() && current_user_can(\'author\') || current_user_can(\'administrator\'))

以下是插件的代码:http://pastebin.com/m1E9QthM. 指向原始插件的链接是-http://wordpress.org/support/plugin/live-edit

4 个回复
SO网友:sakibmoon

您试图限制的功能包括

除了超级管理员和管理员之外,唯一拥有这些权限的角色是编辑器。所以,从编辑器中删除这些功能应该可以实现这一点。

/**
 * Remove capabilities from editors.
 *
 * Call the function when your plugin/theme is activated.
 */
function wpcodex_set_capabilities() {

    // Get the role object.
    $editor = get_role( \'editor\' );

    // A list of capabilities to remove from editors.
    $caps = array(
        \'delete_others_posts\',
        \'edit_others_posts\',
    );

    foreach ( $caps as $cap ) {

        // Remove the capability.
        $editor->remove_cap( $cap );
    }
}
add_action( \'init\', \'wpcodex_set_capabilities\' );
您应该只在插件或主题激活期间运行此代码。从…起Codex

Note: 此设置保存到数据库(在表wp\\u options中的“wp\\u user\\u roles”字段中),因此您应该在主题/插件激活和/或停用时只运行一次。

SO网友:RachieVee

作者是可以发布和管理自己帖子的人。也许看看吧here in the codex at Roles and Capabilities 会有帮助的,它告诉你WordPress的所有角色和不同的功能。

如果您要混合和匹配功能,那么您可能需要做的是创建一个新角色add_role().

SO网友:David

您可以使用元功能检查编辑特殊帖子的权限edit_post 通过将post ID作为第二个参数传递给函数current_user_can():

current_user_can( \'edit_post\', $post_ID )
这将评估能力edit_posts 如果post_author 此帖子的字段与当前用户ID匹配。有关如何工作的详细信息,请参阅函数的代码map_meta_cap() 在里面wp-includes/capabilities.php 管线1073周围。

编辑:要查看插件中的内容,可以检查is_singular() 然后拿到身份证get_the_ID() 有条件地应用插件功能。但是init 胡克说得太早了。使用wp 改为挂钩。有了它,您可以将您的scrips应用于单数查询(例如页面、帖子等)。在保存帖子时,不要忘记检查meta cap(例如在ajax回调中)

SO网友:tfrommen

你可以get_post(), 检查get_current_user_id 等于post_author 然后采取行动。。。

if (\'edit.php\' === $GLOBALS[\'pagenow\']) {
    if (
        current_user_can(\'administrator\')
        || get_post(filter_input(INPUT_POST, \'post_id\'))->post_author == get_current_user_id()
    ) {
        // Yes, you can
    } else {
        wp_redirect(admin_url());
        exit;
    }
}

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register