Для работы с пользователями и полями мы используем плагин WP-Members, который предоставляет неплохой механизм экспорта данных пользователей в CSV. Однако на наших нестандартных объектах мы очень быстро сталкиваемся с тем, что пользователей становится много, а полей с данными для экспорта — ещё больше. Соответственно, на определённом этапе всё это хозяйство падает с ошибкой Request-URI Too Long (код 414) при попытке экспорта пользователей.
Происходит это потому, что форма экспорта (то есть вся страница пользователей) передаёт данные через GET-запрос, то есть URI-параметрами в браузере. Зачем такое было сделано — для меня загадка, но победить нужно. Метод один — переделать запрос экспорта в POST, тогда данные не будут лезть в адресную строку и ошибка 414 уйдёт.
Фикс для этого очень короткий и примитивный — поменять параметр method в форме на странице users.php. Лезть в core-код мы не будем — это нехорошо. Воспользуемся jQuery и напишем примитивный код, который изменит атрибут method для формы при изменении действия:
Мы опрашиваем оба SELECT-а с выбором действий (внизу и вверху), а затем решаем, какой action ставить для формы. Достаточно примитивный код, который можно сократить посредством тернарных операторов. Также нужно переписать обращение к form, чтобы случайно не обратиться к ненужным формам — только к родительской. Но не сейчас.
Записываем этот код в файл get_to_post.js где-нибудь на сервере. Теперь нужно подключить этот файл для нужных страниц в админке. Воспользуемся простым хуком:
То есть мы подключаем наш файл get_to_post.js только для страницы users.php (админка Пользователей).