wp_redirect и is_page_template не работает?

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

function wpse12535_redirect_sample() {

if(is_page_template('list-projects.php')) {
wp_redirect('http://url.com.au/profile');
}

}

add_action( 'init', 'wpse12535_redirect_sample' );

1

Решение

Добавьте выход в конец вашего wp_redirect:

function wpse12535_redirect_sample() {

if(is_page_template('list-projects.php')) {
wp_redirect('http://url.com.au/profile');
exit;
}
}

add_action( 'init', 'wpse12535_redirect_sample' );

Увидеть https://developer.wordpress.org/reference/functions/wp_redirect/#description

Примечание: wp_redirect () не завершается автоматически и почти всегда должен сопровождаться вызовом для выхода;

Редактировать: ответ Раунака правильный, вам нужно изменить хук с действиями init на wp или template_redirect:

https://codex.wordpress.org/Plugin_API/Action_Reference

2

Другие решения

НОТА

  1. Вы должны добавить exit() или же die() после wp_redirect();
  2. использование wp вместо init, Это гарантирует, что шаблон уже загружен.
  3. Если файл шаблона находится в подкаталоге, вы должны проверить с этой частью. Пример:
    /wp-content/themes/my_active_theme/page-templates/list-projects.php,
    тогда вы должны проверить page-templates/list-projects.php

Вот код, который будет работать для вас:

function wh_redirect_sample()
{
if (basename(get_page_template()) == 'list-projects.php')
{
wp_redirect('http://url.com.au/profile');
exit(); //always remember to add this after wp_redirect()
}
}

add_action('wp', 'wh_redirect_sample');

Альтернативный метод:

function wh_redirect_sample()
{
//if list-projects.php is under sub directory say /wp-content/themes/my_active_theme/page-templates/list-projects.php
if (is_page_template('page-templates/list-projects.php'))
{
wp_redirect('http://url.com.au/profile');
exit();
}
//if list-projects.php is under active theme directory say /wp-content/themes/my_active_theme/list-projects.php
if (is_page_template('list-projects.php'))
{
wp_redirect('http://url.com.au/profile');
exit();
}
}

add_action('wp', 'wh_redirect_sample');

Код помещается в файл function.php вашей активной дочерней темы (или темы). Или также в любом файле плагина php.
Код протестирован и работает.

Надеюсь это поможет!

1

По вопросам рекламы [email protected]