Я разрабатываю сайт Wordpress с помощью плагина Edit Flow, поэтому я могу создавать собственные статусы сообщений, чтобы упростить управление сообщениями авторов и участников.
Итак, я создал настраиваемый статус сообщения и получил следующий фильтр, чтобы ограничить возможности редактирования для этого сообщения. Он работает нормально, но проблема в том, что пользователи (кроме администратора) не могут предварительно просмотреть сообщение. Другие пользователи по-прежнему могут видеть ссылку «Предварительный просмотр» в списке сообщений на панели управления, но если они нажмут на нее и перейдут на страницу предварительного просмотра публикации (../post-with-custom-status/?preview=true), будет указано, что сообщение может ' не найти.
function restrict_edit_custom_status_posts( $allcaps, $cap, $args ) {
// Bail out if we're not asking to edit a post ...
if( 'edit_post' != $args[0]
// ... or user is admin
|| !empty( $allcaps['manage_options'] )
// ... or user already cannot edit the post
|| empty( $allcaps['edit_posts'] ))
return $allcaps;
// Load the post data:
$post = get_post( $args[2] );
// If post have custom status
if( 'my_custom_status' == $post->post_status ) {
// Then disallow editing
$allcaps["edit_posts"] = FALSE;
return $allcaps;
}
return $allcaps;
}
add_filter( 'user_has_cap', restrict_edit_custom_status_posts10, 3 );
Итак, есть ли способ ограничить возможность редактирования, но разрешить предварительный просмотр?