如何禁用(或删除)仪表板帖子中的所有帖子、已发布帖子和垃圾邮件

时间:2016-04-19 作者:chest_nut

我一直在寻找方法,完全删除所有,已发布和垃圾网页的用户other than the me, the Administrator.

因此,我的情况是:我有注册用户(我想分配作者、贡献者等角色)。现在,当他们登录到我的网站并访问帖子区域时,我希望他们不要看到这三个链接(全部、已发布、垃圾)。

我尝试过使用jquery函数,它与display基本相同:无,但我认为这不是最佳选择。我知道有更好的方法可以做到这一点。

我确实尝试过使用插件,比如Member和Adminimize等,但我找不到合适的插件。

我希望有人能帮助我。提前谢谢。

Remove All, Published, and Trash

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

这个WP_Posts_List_Table 类扩展WP_List_Table 并且在WP_List_Table::views() 方法我们有以下动态视图过滤器:

/**
 * Filter the list of available list table views.
 *
 * The dynamic portion of the hook name, `$this->screen->id`, refers
 * to the ID of the current screen, usually a string.
 *
 * @since 3.5.0
 *
 * @param array $views An array of available list table views.
 */
 $views = apply_filters( "views_{$this->screen->id}", $views );
所以我们可以使用生成的views_edit-post 筛选以调整后列表表的视图。

示例:

让我们删除非管理员(PHP 5.4+)的所有、发布、未来、粘性、草稿、待处理和垃圾:

/**
 * Remove the \'all\', \'publish\', \'future\', \'sticky\', \'draft\', \'pending\', \'trash\' 
 * views for non-admins
 */
add_filter( \'views_edit-post\', function( $views )
{
    if( current_user_can( \'manage_options\' ) )
        return $views;

    $remove_views = [ \'all\',\'publish\',\'future\',\'sticky\',\'draft\',\'pending\',\'trash\' ];

    foreach( (array) $remove_views as $view )
    {
        if( isset( $views[$view] ) )
            unset( $views[$view] );
    }
    return $views;
} );
您可以在其中修改$remove_views 满足您的需求。另一种方法是只拾取我的视图并只返回该视图。

然后,我们可以尝试使用以下命令进一步强制查看我的视图:

/**
 * Force the \'mine\' view on the \'edit-post\' screen
 */
add_action( \'pre_get_posts\', function( \\WP_Query $q )
{
    if( 
           is_admin() 
        && $q->is_main_query() 
        && \'edit-post\' === get_current_screen()->id 
        && ! current_user_can( \'manage_options\' )
    )
        $q->set( \'author\', get_current_user_id() ); 
} );

Before:

before

After:

after

SO网友:darrinb

这些状态从get_available_post_statuses(), 其值依次来自wp_count_posts().

wp_count_posts() 通过wp_count_posts 滤器所以你可以利用它并劫持返回的东西。

尝试以下操作:

function _dbdb_wp_count_posts( $counts, $type, $perm ) {
    global $pagenow;

    if( \'edit.php\' !== $pagenow ){
        return $counts;
    }

    if( current_user_can( \'manage_options\' ) ){
        return $counts;
    }

    $_counts = new stdClass();
    foreach ( $counts as $status => $count ){
        $_counts->$status = \'\';
    }

    return $_counts;
}
add_filter(\'wp_count_posts\', \'_dbdb_wp_count_posts\', 99, 3 );
这样做的目的是检查我们是否在edit.php 页面中的管理员,如果没有,只需返回计数。

然后检查当前用户是否可以管理站点选项,只有管理员才能管理。如果当前用户可以,则返回所有计数。

如果您通过了此检查,它会假定您不是管理员,因此会将所有计数重置为0, 有效地删除状态链接。

Note: “所有”和“地雷”状态链接在get_views() 的方法WP_Posts_List_Table 类和不可筛选。

我很快在我的开发服务器上测试了这一点,首先以管理员身份登录,然后以作者身份登录。它按预期工作,但一定要彻底测试。

相关推荐

如何修改WP_INCLUDE/BLOCKS/LATEST_posts.php

我是WordPress开发的初学者,希望得到一些帮助。我在一个简单的WordPress网站上工作。基本上,用户希望在主页上显示最新的帖子。我使用了最新帖子块,并将其设置为显示整个帖子内容,现在用户不希望帖子标题链接到单个帖子页面(因为帖子的内容显示在主页上)。如何安全地修改模板文件,使其像h2标记一样使用,而不是在主题中使用的href标记。我知道您可以创建子主题并修改wp_content 文件,但我不确定如何处理中的文件wp_include. 我读到一些关于修改functions.php 但我不确定,如果