Как получить список всех пользователей после выполнения хуку “pre_get_users”?

Вопрос или проблема

У меня есть пользовательский фильтр под названием тип пользователя в админской панели пользователей, и я уже настроил его для отображения в админской панели пользователей. Но я не знаю, как вызвать и сохранить их в массиве, чтобы получить 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. Каждый элемент кода соответствует определенным функциям и действиям, что делает его гибким и расширяемым.

Внедряйте и адаптируйте это решение согласно вашим потребностям. Убедитесь, что ваш код хорошо документирован и оптимизирован в целях производительности. Не забудьте тестировать функционал в безопасной среде перед деплоем на продакшн.

Оцените материал
Добавить комментарий

Капча загружается...