Мое текстовое поле Wordpress package_id в CPT gd_place должно принимать данные только из конечного списка известных и доверенных значений, которые различаются в зависимости от пользователя, например, role_one может вводить только 1, role_two может вводить только 2, role_tree только 3.
Сначала я написал эту функцию, скрывая поле ввода с помощью css
function safe_package( $data ) {
if( 'gd_place' != $data['post_type'] ){
return $data;
//This is for one CPT only
}
$user = wp_get_current_user();
if(!is_admin() && !current_user_can('administrator')){
//Does NOT run in the backend and also takes the admin role into account
if(current_user_can('role_one')){
$data['package_id'] = 1;
return $data;
}
else if (current_user_can('role_two')){
$data['package_id'] = 2;
return $data;
}
else if (current_user_can('role_three')){
$data['package_id'] = 3;
return $data;
}
} else {
//do nothing new
return $data;
}
}
add_filter( 'wp_insert_post_data', 'safe_package' );
Но тогда, возможно, было бы более целесообразно просто проверить ввод пользователя (белый список) и update_post_meta ($ post-> ID,'package_id', $ safe_package);
Поскольку параметры для каждой роли пользователя являются конечными, может быть, имеет смысл просто заменить неправильный ввод ... кто-нибудь знаком с проверкой?