Який гачок слід використовувати для додавання дії, що містить переспрямування?


16

Я хочу створити плагін, який захоплює певні параметри URL-адреси з рядка запиту, щоб створити новий рядок запиту для тієї ж сторінки. Я стежу за відмінною книгою Професійні програми WordPress Plugin Development, але я не впевнений, який гачок використовувати для цієї дії. Ось моя функція дії:

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

Яким був результат? Позначте розчин pls.
кайзер

Відповіді:


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

Але я б сказав, що цей приклад від кайзера не може працювати, тому що після перенаправлення цей гачок 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.