Какой хук следует использовать для добавления действия с перенаправлением?

20 мар. 2011 г., 14:26:18
Просмотры: 33.4K
Голосов: 22

Я хочу создать плагин, который берет определенные параметры URL из строки запроса для создания новой строки запроса для той же страницы. Я следую отличной книге Professional WordPress Plugin Development, но я не уверен, какой хук использовать для этого действия. Вот моя функция действия:

add_action( 'init', 'tccl_redirect' );
function tccl_redirect() {
    header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" );
?>

Какие хуки подходят для перенаправлений через header?

5
Комментарии

Вы действительно хотите изменить конечный URL или только переменные, используемые в WP_Query?

scribu scribu
20 мар. 2011 г. 15:13:32

Представленный вами код будет перенаправлять каждую страницу, это то, что вам нужно? При каких условиях должно происходить это перенаправление? ПРИМЕЧАНИЕ: Я всё равно +1 поставил kaiser, template_redirect тоже был бы моим предложением.

t31os t31os
20 мар. 2011 г. 16:03:29

scribu, я хочу изменить конечный URL и строку запроса.

jnthnclrk jnthnclrk
24 мар. 2011 г. 17:03:35

t31os, я упростил код для вопроса. В реальной ситуации там больше условий.

jnthnclrk jnthnclrk
24 мар. 2011 г. 17:04:48

Каков был результат? Пожалуйста, отметьте решение.

kaiser kaiser
24 окт. 2011 г. 15:56:29
Все ответы на вопрос 3
0
25

Я бы сказал template_redirect. Но взгляните на Справочник действий.

Пример

Не забудьте использовать exit() при редиректе.

/**
 * Этот пример перенаправляет всё на страницу index.php
 * Вы можете сделать то же самое для панели управления с помощью admin_url( '/' );
 * Или просто основывать редирект на условиях, таких как
 * функции is_*(), current_user_can( 'capability' ), глобальные переменные, get_current_screen()...
 * 
 * @return void
 */
function wpse12535_redirect_sample() {

    exit( wp_redirect( home_url( '/' ) ) );

}

add_action( 'template_redirect', 'wpse12535_redirect_sample' );
20 мар. 2011 г. 15:59:42
1
18

Как ответил kaiser, хук template_redirect действительно подходит для редиректов.

Также вам следует использовать функцию wp_redirect() вместо установки заголовков вручную.

20 мар. 2011 г. 16:05:08
Комментарии

Спасибо за предложение, было бы интересно узнать, почему wp_redirect предпочтительнее здесь: http://wordpress.stackexchange.com/questions/12944/why-is-wp-redirect-preferable-to-a-standard-php-header-redirect

jnthnclrk jnthnclrk
24 мар. 2011 г. 17:11:00
0
13

Но я бы сказал, что этот пример от kaiser не будет работать, потому что после редиректа этот хук template_redirect срабатывает снова и снова, что приведёт к бесконечной переадресации!

Лучше проверить, находитесь ли вы уже на главной странице, например так:

function wpse12535_redirect_sample() {

    $current_url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $site_url = get_bloginfo('siteurl') . "/";

    if($current_url != $site_url)       
      exit( wp_redirect( home_url( '/' ) ));    

}
add_action( 'template_redirect', 'wpse12535_redirect_sample');

У меня работает отлично. Есть предложения? С уважением!

25 сент. 2013 г. 15:28:51