我想将挂起的帖子仅限于管理部分的某些用户,因此我想在查看所有帖子时将其从帖子状态选项中删除(下图中以红色突出显示的位):
然而,我找不到我需要编辑这个的钩子。谁能把我引向正确的方向?我扫描了筛选器引用,但没有看到任何适当的内容。我应该使用什么钩子来编辑管理中的POST STATUS选项?
2 个回复
SO网友:cybmeta
您可以使用过滤器views_edit-post
(或views_edit-{custom-post-type}
) 要修改可用的“视图”,请执行以下操作:
add_filter(\'views_edit-post\', \'cyb_remove_pending_filter\' );
function cyb_remove_pending_filter( $views ) {
if( isset( $views[\'pending\'] ) ) {
unset( $views[\'pending\'] );
}
return $views;
}
在上述过滤器中,您需要包含要应用的用户规则。例如,如果要仅为无法编辑其他帖子的用户删除“挂起”视图,请执行以下操作:add_filter(\'views_edit-post\', \'cyb_remove_pending_filter\' );
function cyb_remove_pending_filter( $views ) {
if( isset( $views[\'pending\'] ) && ! current_user_can(\'edit_others_posts\') ) {
unset( $views[\'pending\'] );
}
return $views;
}
此外,如果排除挂起的视图,则需要更新“全部”post计数:add_filter(\'views_edit-post\', \'cyb_remove_pending_filter\' );
function cyb_remove_pending_filter( $views ) {
if( isset( $views[\'pending\'] ) && ! current_user_can(\'edit_others_posts\') ) {
unset( $views[\'pending\'] );
$args = [
// Post params here
// Include only the desired post statues for "All"
\'post_status\' => [ \'publish\', \'draft\', \'future\', \'trash\' ],
\'all_posts\' => 1,
];
$result = new WP_Query($args);
if($result->found_posts > 0) {
$views[\'all\'] = sprintf(
\'<a href="%s">\'.__(\'All\').\' <span class="count">(%d)</span></a>\',
admin_url(\'edit.php?all_posts=1&post_type=\'.get_query_var(\'post_type\')),
$result->found_posts
);
}
}
return $views;
}
此代码仅删除屏幕中的过滤器,但不会阻止对处于挂起状态的帖子的访问。阻止您需要使用的访问pre_get_posts
行动例如:add_action( \'pre_get_posts\', \'cyb_exclude_pending_posts\' );
function cyb_exclude_pending_posts( $query ) {
// only in admin, main query and if user can not edit others posts
if( is_admin() && ! current_user_can(\'edit_others_posts\') && $query->is_main_query() ) {
// Include only the desired post statues
$post_status_arg = [ \'publish\', \'draft\', \'future\', \'trash\' ];
$query->set( \'post_status\', $post_status_arg );
}
}
SO网友:Adam
您要查找的筛选器是views_{$this->screen->id}
位于WP_List_Table::views()
方法
哪里$this->screen->id
是指你所处的环境,例如。posts
, users
, 等
文件wp-admin/class-wp-list-table.php
示例用法:
function filter_posts_listable_views($views) {
//do your thing...
return $views;
}
add_filter( \'views_posts\', \'filter_posts_list_table_views\', 100);