Фильтр WordPress для изменения списка авторов в окне редактирования Авторы

Я хочу изменить список пользователей в раскрывающемся списке «Выбор автора» на странице редактирования сообщения для пользовательского типа сообщения. Могу ли я использовать фильтр-крючок для этого? Я не смог найти никакой информации о фильтре, который делает то, что я хочу.

Хук должен (теоретически) позволить мне вернуть пользовательский массив, и это будут пользователи, которые заполняют поле выбора внизу. Причина, по которой я хочу это сделать, заключается в том, что я могу условно отфильтровать пользователей по их роли для разных типов записей. Как администратор (или другие администраторы), я не хочу проверять, играет ли пользователь определенную роль, прежде чем делать его автором.

Пример кода:

add_filter('example_filter', 'my_custom_function');
function my_custom_function ( $users ){

// Get users with role 'my_role' for post type 'my_post_type'
if( 'my_post_type' == get_post_type() ){
$users = get_users( ['role' => 'my_role'] );
}

// Get users with role 'other_role' for post type 'other_post_type'
if( 'other_post_type' == get_post_type() ){
$users = get_users( ['role' => 'other_role'] );
}

return $users;
}

0

Решение

Вы можете использовать хук ‘wp_dropdown_users_args’.

Добавьте приведенный ниже фрагмент кода в файл functions.php вашей темы.

add_filter( 'wp_dropdown_users_args', 'change_user_dropdown', 10, 2 );

function change_user_dropdown( $query_args, $r ){
// get screen object
$screen = get_current_screen();

// list users whose role is e.g. 'Editor' for 'post' post type
if( $screen->post_type == 'post' ):
$query_args['role'] = array('Editor');

// unset default role
unset( $query_args['who'] );
endif;

// list users whose role is e.g. 'Administrator' for 'page' post type
if( $screen->post_type == 'page' ):
$query_args['role'] = array('Administrator');

// unset default role
unset( $query_args['who'] );
endif;

return $query_args;
}

дайте мне знать, если это работает для вас или нет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]