如何禁止用户查看其他页面

时间:2018-02-07 作者:Deb

我有一个会员网站,我的用户可以在那里创建自己的页面。我在函数中使用以下代码段。php删除其他用户的已发布、垃圾等选项,只显示“我的”。

/**
 * Remove the \'all\', \'publish\', \'future\', \'sticky\', \'draft\', \'pending\', \'trash\' 
 * views for non-admins
 */
add_filter( \'views_edit-page\', 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;
} );
它工作得很好。当用户创建页面时,它只显示“我的”选项。

但是当新用户第一次来创建页面时(他们没有创建任何页面);他们仍然可以查看“全部”选项,其中显示(其他用户的)所有已发布页面。此外,当他们删除他所有的“我的”页面时,他们可以查看“全部”选项。

那么,当用户第一次创建页面或删除所有页面时,如何阻止用户看到“all”选项呢?

1 个回复
最合适的回答,由SO网友:Max Yudin 整理而成
<?php
add_filter(\'pre_get_posts\', \'my_current_author_posts\');

function my_current_author_posts( $query )
{
    global $pagenow;

    // Check if you are on the right Admin page, do nothing if not
    if( \'edit.php\' != $pagenow || ! isset( $_GET[\'post_type\'] ) || \'page\' != $_GET[\'post_type\'] || ! is_admin() ) {
        return;
    }

    // get current user Object
    $current_user = wp_get_current_user();

    // check user capabilities
    if( ! current_user_can( \'edit_others_pages\' ) ) {

        // remove views for pages, see the function below
        add_action( \'views_edit-page\', \'my_remove_views\' );

        // set WP_Query \'Author\' parameter
        $query->set( \'author\', $current_user->ID );
    }

    return $query;
}

// function to remove views
function my_remove_views( $views )
{

    $views_to_remove = array(
        \'all\',
        \'publish\',
        \'future\',
        \'sticky\',
        \'draft\',
        \'pending\',
        \'trash\',
    );

    foreach ( $views_to_remove as $view_to_remove ) {
        unset( $views[$view_to_remove] );
    }

    return $views;
}
结束

相关推荐

Design view breaking on Pages

对于我的客户端站点,当我尝试创建新页面并发布设计视图时,设计视图被破坏了,但博客帖子视图显示正确,该站点使用了以前的开发人员开发的自定义WordPress主题。Wp站点:http://blog.biblesforamerica.org页码:http://blog.biblesforamerica.org/online-bible-studies-bibles-america/如何做到这一点?这是单曲的代码。页php<div id=\"primary\" class=\"content-area\"&