我有一个会员网站,我的用户可以在那里创建自己的页面。我在函数中使用以下代码段。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”选项呢?
最合适的回答,由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;
}