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


16

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

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

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


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

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

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

t31os, я упростил свой код для вопроса. Реальная вещь содержит больше условий.
jnthnclrk

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

Ответы:


13

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

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


Спасибо за предложение, не прочь узнать, почему 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');

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.