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

16

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

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

Какие крючки подходят для перенаправления заголовка?

jnthnclrk
источник
Вы действительно хотите изменить окончательный URL или только переменные, используемые в WP_Query?
scribu
Код, который вы разместили, будет в основном перенаправлять каждую страницу, это то, что вы хотите? При каких условиях должно происходить это перенаправление? ПРИМЕЧАНИЕ: я все равно получил + 1 кайзер, template_redirectтоже мое предложение.
t31os
scribu, я хочу изменить окончательный URL и строку запроса.
jnthnclrk
t31os, я упростил свой код для вопроса. Реальная вещь содержит больше условий.
jnthnclrk
Каков был результат? Отметьте решение, пожалуйста.
Кайзер

Ответы:

13

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

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

Rarst
источник
Спасибо за предложение, не прочь узнать, почему wp_redirect предпочтительнее, здесь: wordpress.stackexchange.com/questions/12944/…
jnthnclrk
17

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

пример

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

/**
 * This example redirects everything to the index.php page
 * You can do the same for the dashboard with admin_url( '/' );
 * Or simply base the redirect on conditionals like 
 * is_*() functions, current_user_can( 'capability' ), globals, get_current_screen()...
 * 
 * @return void
 */
function wpse12535_redirect_sample() {

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

}

add_action( 'template_redirect', 'wpse12535_redirect_sample' );
кайзер
источник
8

Но я бы сказал, что этот пример от 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');

У меня работает нормально. Какие-либо предложения? С уважением!

Alex
источник