如果您愿意,用户只能删除自己的帖子,那么检查该帖子的用户ID和作者ID是很重要的。下面的源代码示例在管理栏中添加一个垃圾桶按钮,用户可以轻松删除自己的帖子。
关键是功能get_queried_object()
. 此对象将所有值存储到前端的post中,您可以检查用户id,有登录-get_current_user_id()
. 对于严格比较来说,同样重要的是,将所有值设置为同一类型,如整数。
也可以使用WP核心功能current_user_can()
使用第二个参数标识每个帖子的权限:current_user_can(\'edit_post\', 123)
这将检查具有ID的post的能力123
. 可能会更容易一些,因为检查了author对象和post对象。
在我的示例中,您必须使用全局$post
.
add_action( \'admin_bar_menu\', \'fb_add_admin_bar_trash_menu\', 35 );
function fb_add_admin_bar_trash_menu() {
if ( ! is_super_admin() || ! is_admin_bar_showing() )
return;
$current_object = get_queried_object();
// check, is the objekt with the value readable
if ( ! isset( $current_object->post_author ) )
return;
// check, if the user id the same as the author-id if the current post
if ( (int) $current_object->post_author !== (int) get_current_user_id() )
return;
if ( empty( $current_object ) )
return;
if ( ! empty( $current_object->post_type ) &&
( $post_type_object = get_post_type_object( $current_object->post_type ) ) &&
current_user_can( $post_type_object->cap->edit_post, $current_object->ID )
) {
global $wp_admin_bar;
$wp_admin_bar->add_menu(
array(
\'id\' => \'delete\',
\'title\' => __( \'Move to Trash\' ),
\'href\' => get_delete_post_link( $current_object->term_id )
)
);
}
}
对于非admin的非访问管理区域,编写一个包含重写的小函数更容易,而不是硬模。使用WordPress功能
wp_redirect()
重写到特定url或前端。
add_action( \'admin_init\', \'fb_redirect_to_frontend\' );
function fb_redirect_to_frontend() {
if ( ! current_user_can( \'remove_users\' ) )
wp_redirect( site_url() );
}