如何仅在某些类型的帖子中显示分配给当前用户的帖子

时间:2019-04-07 作者:Richard SD

我正在努力让这段代码正常工作。在admin id中,只显示分配给当前用户的帖子,只显示某些帖子类型,如:shop\\u order、pages、post。但显示其他帖子类型中的所有帖子,如:产品、事件。

如何修复此代码?

谢谢

add_action( \'load-edit.php\', \'posts_for_current_author\' );
function posts_for_current_author() {
    global $user_ID;

    /*if current user is an \'administrator\' do nothing*/
    //if ( current_user_can( \'add_users\' ) ) return;

    /*if current user is an \'administrator\' or \'editor\' do nothing*/
    if ( current_user_can( \'add_users\' ) && is_post_type(\'product\')) return;

    if ( ! isset( $_GET[\'author\'] ) ) {
        wp_redirect( add_query_arg( \'author\', $user_ID ) );
        exit;
    }

}

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

Rolescapabilities 用于控制访问,通常您应该使用它们。例如,功能edit_other_postsedit_published_posts 需要编辑其他用户的帖子。其他类型也一样(第->edit_other_pages, edit_published_pages).

因为,除了限制更改其他用户帖子的权限外,您还希望它们不可见,因此您可能需要使用上述解决方案。

作用se333732_pre_get_post 用于筛选管理中的职位列表,而se333732_load_post 如果用户打开编辑页面(猜测帖子编号),但他没有访问权限,则重定向用户。

add_action( \'pre_get_posts\', \'se333732_pre_get_post\' );
add_action( \'load-post.php\', \'se333732_load_post\' );

function se333732_pre_get_post( $query )
{
    if ( !is_admin() )
        return;

    $cfg_limited_access = se333732_roles_and_types();
    if ( $query->is_main_query() && in_array($query->query_vars[\'post_type\'], $cfg_limited_access[\'post_types\']) )
    {
        $user = wp_get_current_user();
        if ( !array_intersect( $cfg_limited_access[\'privileged_roles\'], $user->roles ) )
            $query->query_vars[\'author\'] = get_current_user_id();
    }
}

function se333732_load_post()
{
    if ( isset($_GET[\'post\']) && (int)$_GET[\'post\'] == $_GET[\'post\'] )
    {
        $post_id = (int)$_GET[\'post\'];
        $post = get_post( $post_id );
        if ( $post )
        {
            $author_id = $post->post_author;
            $post_type = $post->post_type;
            $user = wp_get_current_user();
            $cfg_limited_access = se333732_roles_and_types();

            if ( $author_id != $user->ID 
                    && in_array( $post_type, $cfg_limited_access[\'post_types\'] ) 
                    && !array_intersect( $cfg_limited_access[\'privileged_roles\'], $user->roles ) )
            {
                wp_redirect( admin_url("edit.php?post_type=$post_type") );
            }
        }
    }
}

function se333732_roles_and_types()
{
    return [
        \'privileged_roles\'  => [ \'editor\', \'administrator\' ],
        \'post_types\'        => [ \'page\', \'post\', \'shop_order\' ],
    ];
}

相关推荐

修改wp-admin页眉‘viewport’元数据

“wp admin/admin”标题。php“文件”输出“视口”元数据。视口的值似乎已硬编码到文件中。(参见:https://github.com/WordPress/WordPress/blob/master/wp-admin/admin-header.php 第89行)。我想从自定义插件编辑视口。对于如何做到这一点,是否有任何建议?通过硬编码视口数据后面的挂钩注入的任何代码都没有任何效果,并且我无法在硬编码数据之前出现的部分中看到任何可用挂钩。