Восстановление удаленных параметров строки запроса в области администратора WP

Разрабатывая недавно свои плагины WordPress, я заметил, что Chrome удаляет параметры строки запроса из URL, отображаемого в адресной строке браузера. Аналогично Firefox и другие браузеры не показывали полный URL в адресной строке, что затрудняло разработку, так как в то время я тестировал перенаправления URL с параметрами запроса.

Проблема

В частности, я работал с GET-переменными, например, примерно так URL с парой параметров:

https://example.com/wp-admin/admin.php?page=bbq_license&settings-updated=true

..продолжал возвращаться в браузере в таком виде:

https://example.com/wp-admin/admin.php?page=bbq_license

Странным было то, что на короткое время я мог видеть часть URL, которая удалялась. То есть страница загружалась с правильными параметрами, но они каким-то образом удалялись или скрывались после загрузки страницы. Я подумал, что, возможно, здесь замешан JavaScript…

Причина

После некоторого поиска дополнительной информации или подсказок, я обнаружил этот Make WordPress Ticket, предполагающий нечто подобное:

url = the canonical URL for the address
	if (typeof history.replaceState === 'function') { // check html5 functionality support
	data = {dummy:true};
	history.replaceState(data,'',url);
}

Выяснилось, что отсутствие/удаление параметров строки запроса — это не проблема Chrome, Firefox или любого другого браузера, а скорее то, что команда WordPress внедрила намеренно. Если вы прочитаете тикет в Trac, то сможете понять причину такого решения — изменить его, чтобы URL-адреса одноразового использования не испортили ничего другого.

Так что я понимаю, к сожалению, есть некоторые реальные минусы, такие как:

  • Удаление параметров нарушает функциональность страницы.
  • Требуются дополнительные ресурсы и обработка для полного решения проблемы
  • Требует от разработчиков дополнительных шагов во время разработки
  • Пользователь не может просмотреть весь URL, что очень важно
  • Может сбить с толку пользователей, которые полагаются на адресную строку.
  • Изменяет общую функциональность/функциональность по умолчанию для побочных случаев.

На мой взгляд, это намеренное удаление дополнительных параметров строки запроса приносит больше вреда, чем пользы, так как разработчикам следует оставить право должным образом тестировать и реализовывать свои собственные решения по совместимости и обработке страниц. По сути, это просто ошибочное мышление типа чрезмерной инженерии, IMO. Подобно тому, как несколько лет назад Google и Firefox играли с полным удалением адресной строки (что обернулось полной катастрофой).

Итог: этого плохого решения можно (и нужно) было избежать, придерживаясь одного из золотых правил Интернета:

Не связывайтесь с URL-адресами.

Решение

К счастью, команда WordPress понимает, что удаление параметров URI не всегда желательно, и поэтому добавила крючок фильтрации для разработчиков, чтобы изменить поведение «remove-parameter» по умолчанию:

add_filter('removable_query_args', 'custom_function_name'); 

Этот хук позволяет нам изменять массив переменных запроса-строки, которые должны быть удалены. Вы можете узнать больше о хуке removable_query_args в каталоге хуков WordPress.

Итак, решение для тех, кто хочет НЕ удалять никакие параметры запроса, и таким образом отображать полный, оригинальный URL в адресной строке. Вот функция, которая просто работает:

function shapeSpace_enable_admin_query_params($removable_url_params) {
	
	unset($removable_url_params);
	
	$removable_url_params = array();
	
	return $removable_url_params;
	
}
add_filter('removable_query_args', 'shapeSpace_enable_admin_query_params'); 

Эта простая функция перехватывает массив параметров, которые нужно удалить, и заменяет его пустым массивом. В результате ни один параметр не будет удален, а полный URL останется нетронутым.

Разрешить определенные параметры

Или, если вы хотите разрешить не все, а только определенные параметры, вышеприведенную функцию можно модифицировать следующим образом:

function shapeSpace_allow_admin_query_params($removable_url_params) {
	
	if (($key = array_search('settings-updated', $removable_url_params)) !== false) {
		
		unset($removable_url_params[$key]);
		
	}
	
	return $removable_url_params;
	
}
add_filter('removable_query_args', 'shapeSpace_allow_admin_query_params');

Удалить определенные параметры

И, наконец, вот пример, показывающий, как добавить собственные параметры в массив, чтобы они также были удалены (вместе с теми параметрами, которые удаляются по умолчанию):

function shapeSpace_remove_admin_query_params($removable_url_params) {
	
	$remove_params = array('parameter-name');
	
	return array_merge($remove_params, $removable_url_params);
	
}
add_filter('removable_query_args', 'shapeSpace_remove_admin_query_params');

Используя описанные выше методы, можно добавлять, удалять или восстанавливать любые и все параметры строки запроса, отображаемые в области администратора для любого URL.

Заключительные размышления

Хотя фильтр-хук полностью решает проблему, удаление части URL является отсталым способом решения проблем совместимости и других проблем, связанных с JavaScript. Но на самом деле в этом нет ничего страшного, просто хотелось задокументировать проблему для тех, кто задается вопросом, почему параметры URL удаляются на страницах в области администратора WordPress.

Также предупреждаем: Вероятно, лучший совет — использовать вышеупомянутый фильтр и методы только для разработки и тестирования. Если вы обязательно должны включить его в плагин, убедитесь, что используете условную логику, чтобы он запускался только на вашей собственной странице плагина.

Оцените статью
devanswers.ru
Добавить комментарий