Вопрос или проблема
У меня есть пользовательский фильтр под названием тип пользователя в админской панели пользователей, и я уже настроил его для отображения в админской панели пользователей. Но я не знаю, как вызвать и сохранить их в массиве, чтобы получить user_ids и выполнить другое действие.
Моё другое действие будет заключаться в получении всех мета-ключей определённого пользователя, и я хотел бы экспортировать их в Excel-файл. Но перед этим у меня должна быть возможность отфильтровать их или просто экспортировать всех пользователей, что я уже выполнил.
function add_course_section_filter() {
if ( isset( $_GET[ 'user_type' ]) ) {
$user_type = $_GET[ 'user_type' ];
} else {
$user_type="";
}
echo ' <select name="user_type[]" style="float:none;"><option value="">Выберите тип пользователя...</option>';
if($user_type[0] == 'designer'){
$selected_designer="selected="selected"";
}
if($user_type[0] == 'client'){
$selected_client="selected="selected"";
}
echo '<option value="designer" ' . $selected_designer . '>Строитель/Дизайнер</option>';
echo '<option value="client" ' . $selected_client . '>Клиент</option>';
echo '</select>';
echo '<input type="submit" class="button" value="Фильтр">';
}
add_action( 'restrict_manage_users', 'add_course_section_filter' );
function filter_users_by_course_section( $query ) {
global $pagenow;
if ( is_admin() && 'users.php' == $pagenow && isset( $_GET[ 'user_type' ] )) {
$user_type = $_GET[ 'user_type' ];
if($user_type[0] != ''){
$meta_query = array(
array(
'key' => '_user_type',
'value' => $user_type[0]
)
);
$query->set( 'meta_key', '_user_type' );
$query->set( 'meta_query', $meta_query );
}else{
}
}
}
add_filter( 'pre_get_users', 'filter_users_by_course_section' );
С вашим кодом список пользователей фильтруется по метаданных “_user_type”.
Затем вы можете создать новое массовое действие для экспорта данных выбранных пользователей следующим образом:
const ACTION_EXPORT_CSV = "MyPlugin__exportCSV";
add_filter("bulk_actions-users", function ($actions) {
$actions[ACTION_EXPORT_CSV] = "Экспорт CSV";
return $actions;
});
add_action("load-users.php", function () {
if ( isset($_GET["action"])
&& (ACTION_EXPORT_CSV === $_GET["action"])
) {
// здесь идентификаторы выбранных пользователей находятся в $_GET["users"]
}
});
Ответ или решение
Для получения списка пользователей после применения хука pre_get_users
, необходимо сохранить отфильтрованные идентификаторы пользователей в массиве. В данном контексте, вы уже правильно применили фильтрацию по мета-полям. Теперь давайте рассмотрим, как получить идентификаторы пользователей и использовать их для дальнейших действий, таких как экспорт в Excel.
1. Получение идентификаторов пользователей
После применения фильтрации, вы можете получить список идентификаторов пользователей, используя функцию get_users()
. Это позволит вам извлечь информацию о пользователях, соответствующих вашим критериям. Вот пример того, как это можно реализовать:
function fetch_filtered_users_ids($user_type) {
$args = array(
'meta_key' => '_user_type',
'meta_value' => $user_type,
'fields' => 'ID' // Получаем только идентификаторы пользователей
);
$user_ids = get_users($args);
return $user_ids;
}
2. Интеграция с экшеном для экспорта данных
Теперь, когда вы получили идентификаторы пользователей, вам нужно интегрировать это в процесс экспорта. Ниже приведен пример, как это можно сделать:
add_action("load-users.php", function () {
if (isset($_GET["action"]) && ACTION_EXPORT_CSV === $_GET["action"]) {
// Идентификаторы выбранных пользователей
$user_ids = isset($_GET["users"]) ? $_GET["users"] : array();
// Проверяем, есть ли выбранные пользователи
if (!empty($user_ids)) {
// Здесь вы можете выполнять действия с мета-данными пользователей
export_users_meta_to_csv($user_ids);
} else {
// Обработка случая, когда нет выбранных пользователей
wp_die('Пожалуйста, выберите пользователей для экспорта.');
}
}
});
// Функция для экспорта мета-данных пользователей в CSV
function export_users_meta_to_csv($user_ids) {
// Установите заголовки для скачивания файла CSV
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="users_export.csv"');
$output = fopen('php://output', 'w');
// Запись заголовков
fputcsv($output, array('User ID', 'Meta Key', 'Meta Value'));
foreach ($user_ids as $user_id) {
// Получаем все мета-данные данного пользователя
$user_meta = get_user_meta($user_id);
// Записываем мета-данные в CSV
foreach ($user_meta as $key => $value) {
fputcsv($output, array($user_id, $key, implode(', ', (array)$value)));
}
}
fclose($output);
exit();
}
3. Заключение
В данном решении мы освоили приемы фильтрации пользователей на основе произвольного поля, а также методику экспорта их мета-данных в формате CSV. Каждый элемент кода соответствует определенным функциям и действиям, что делает его гибким и расширяемым.
Внедряйте и адаптируйте это решение согласно вашим потребностям. Убедитесь, что ваш код хорошо документирован и оптимизирован в целях производительности. Не забудьте тестировать функционал в безопасной среде перед деплоем на продакшн.