Как победить ошибку 414 при экспорте данных пользователей в WP-Members

Для работы с пользователями и полями мы используем плагин  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 (админка Пользователей).



Игорь Балькин
Автор: Игорь Балькин. Веб-разработчик с 2001 года. Разработчик сайтов на WordPress, CRM и веб-приложений. Минск, Беларусь. Контактная информация.

Прокомментировать

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать HTML-тэги и атрибуты:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>