Вопрос или проблема
Я хочу создать плагин, который извлекает определенные параметры URL из строки запроса, чтобы построить новую строку запроса для той же страницы. Я следую отличной книге “Профессиональная разработка плагинов для WordPress”, но не уверен, какой хук использовать для этого действия. Вот моя функция действия:
add_action( 'init', 'tccl_redirect' );
function tccl_redirect() {
header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>
Какие хуки подходят для перенаправлений заголовков?
Как ответил кaiser, хук template_redirect
действительно подходит для перенаправлений.
Также вам следует использовать wp_redirect()
функцию, а не устанавливать заголовок.
Я бы сказал template_redirect
. Но взгляните на Справочник действия.
Пример
Не забудьте exit()
при перенаправлении.
/**
* Этот пример перенаправляет все на страницу index.php
* Вы можете сделать то же самое для панели управления с помощью admin_url( "https://wordpress.stackexchange.com/" );
* Или просто основывайте перенаправление на условных выражениях, таких как
* функции is_*(), current_user_can( 'capability' ), глобальные переменные, get_current_screen()...
*
* @return void
*/
function wpse12535_redirect_sample() {
exit( wp_redirect( home_url( "https://wordpress.stackexchange.com/" ) ) );
}
add_action( 'template_redirect', 'wpse12535_redirect_sample' );
Но я бы сказал, что этот пример от kaiser не будет работать, потому что после перенаправления этот хук template_redirect будет срабатывать снова и снова, и у вас будет бесконечное перенаправление!
Лучше проверить, находитесь ли вы уже на главной странице, вот так:
function wpse12535_redirect_sample() {
$current_url="http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$site_url = get_bloginfo('siteurl') . "https://wordpress.stackexchange.com/";
if($current_url != $site_url)
exit( wp_redirect( home_url( "https://wordpress.stackexchange.com/" ) ));
}
add_action( 'template_redirect', 'wpse12535_redirect_sample');
Для меня работает хорошо. Есть какие-либо предложения? С уважением!
function custom_login_redirect( $redirect_to, $request, $user ) {
return admin_url( 'profile.php' );
}
add_filter( 'login_redirect', 'custom_login_redirect', 10, 3 );
Ответ или решение
Для реализации редиректа в вашем плагине WordPress, подходящий хуки для выполнения действий, связанных с перенаправлениями, включают хук template_redirect
. Этот хук вызывается перед тем, как WordPress загрузит шаблон страницы, что делает его идеальным местом для выполнения редиректов на основе условий, определенных в вашем плагине.
Использование template_redirect
Когда вы хотите выполнить редирект, вы можете воспользоваться функцией wp_redirect()
, которая является предпочтительным способом установки заголовков перенаправления в WordPress. В отличие от простого установленного заголовка с помощью header()
, функция wp_redirect()
предоставляет дополнительные преимущества, такие как автоматическое управление кодами состояния и безопасное формирование URL.
Вот пример того, как может выглядеть ваш код с использованием template_redirect
:
// Ваш код плагина
add_action( 'template_redirect', 'tccl_redirect' );
function tccl_redirect() {
// Получение параметров из URL
$newparam = 'your_param'; // замените на нужное значение
$newvalue = 'your_value'; // замените на нужное значение
// Здесь вы можете добавить условия, чтобы избежать бесконечного редиректа
if ( ! isset( $_GET[ $newparam ] ) ) {
// Формирование нового URL
$redirect_url = home_url( "?$newparam=$newvalue" );
// Выполнение перенаправления
wp_redirect( $redirect_url );
exit; // Не забудьте завершить выполнение скрипта после перенаправления
}
}
Важные замечания
- Выход из функции: Используйте
exit()
послеwp_redirect()
, чтобы остановить выполнение скрипта. Это необходимо, чтобы предотвратить дальнейшую обработку страниц после редиректа. - Избежание бесконечного редиректа: Добавьте условия, чтобы предотвратить бесконечные циклы редиректов. Например, проверьте, существует ли уже параметр
$newparam
в текущем URL перед выполнением редиректа. - Коды состояния: По умолчанию
wp_redirect()
устанавливает код состояния 302 (временное перенаправление). Если вам нужно использовать код 301 (постоянное перенаправление), вы можете передать его вторым аргументом функции:wp_redirect( $url, 301 );
.
Заключение
Использование хука template_redirect
совместно с функцией wp_redirect()
является правильным подходом для исполнения редиректов в ваших плагинах на WordPress. Обеспечивая правильные условия, вы можете эффективно управлять перенаправлениями, избегая потенциальных проблем с бесконечными циклами редиректов. Убедитесь, что ваш код соответствует стандартам безопасности и производительности, чтобы ваш плагин работал корректно.