Как перенаправить посетителя на произвольный URL с помощью PHP-кода в functions.php

5 июн. 2013 г., 15:50:28
Просмотры: 32.9K
Голосов: 1

Пользователи должны быть перенаправлены на произвольный URL, который мне уже известен (это часть логики программирования). Мне просто нужно знать, какую функцию WP использовать/какой PHP-код применить для перенаправления пользователя на новый URL. Этот код будет выполняться внутри PHP-функции в functions.php--> эта функция сначала выполнит некоторую обработку, а затем отправит пользователя на новый URL

Как мне это сделать?

Примечание -- Я пробовал использовать wp_redirect, но это не работает.

Вот код, который я пытался использовать (который не работает)--

       $redirecturl = get_post_type_archive_link('property');
       echo "\n\n URL перенаправления для записей недвижимости=" + $redirecturl;
       wp_redirect( "http://" .  $redirecturl + "?post_type=property&search_keyword=" + $search_keyword ;
5
Комментарии

Отредактируйте свой пост, чтобы показать нам код, который вы пробовали, но он не сработал.

Charles Clarkson Charles Clarkson
5 июн. 2013 г. 15:59:24

@CharlesClarkson добавил в пост код, который не сработал...

Arvind Arvind
5 июн. 2013 г. 16:06:26

@CharlesClarkson wp_redirect работает только когда никакие данные еще не были отправлены — то есть это должно быть первым выполняемым действием (вот почему появляется сообщение об ошибке "Cannot Modify header information-...."). Поэтому я не могу его использовать...

Arvind Arvind
5 июн. 2013 г. 16:20:58

Эхо является причиной предупреждающего сообщения. Вы не можете использовать echo и затем перенаправлять с помощью wp_redirect().

Charles Clarkson Charles Clarkson
5 июн. 2013 г. 16:27:18

Вы можете использовать Output Buffering, если вам действительно нужно что-то выводить через echo - посмотрите здесь: http://stackoverflow.com/questions/3766353/interview-question-can-we-have-an-echo-before-header

Nicolai Grossherr Nicolai Grossherr
5 июн. 2013 г. 16:29:48
Все ответы на вопрос 2
0

Во-первых, трудно поверить, что wp_redirect не работает. Ниже приведён пример кода, демонстрирующий его использование:

function wpse101952_redirect() {
  global $post;

    if( /*НЕКОТОРАЯ УСЛОВНАЯ ЛОГИКА*/ ) { //примеры: is_home() или is_single() или is_user_logged_in() или isset($_SESSION['some_var'])

        wp_redirect( /*КОНКРЕТНЫЙ URL*/ );

        exit();
    }
}
add_action( 'template_redirect', 'wpse101952_redirect' );

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


редактирование:

Функция get_post_type_archive_link() возвращает полную постоянную ссылку, вам не нужно добавлять http:// и ?post_type=property:

   wp_redirect( $redirecturl . "?search_keyword=" . $search_keyword );
5 июн. 2013 г. 16:06:47
0

При выполнении аналогичного кода я получаю следующее предупреждение в логе ошибок:

Warning: Cannot modify header information - headers already sent by (output started at /xxx/wordpress/wp-content/themes/balance/functions.php:4) in /xxx/wordpress/wp-includes/pluggable.php on line 876

Когда я использовал этот код для теста:

$redirecturl = 'google.com';
wp_redirect( 'http://' .  $redirecturl );
exit;

Всё работает нормально, так что вы можете попробовать:

$redirecturl = get_post_type_archive_link( 'property' );
wp_redirect( 'http://' .  $redirecturl . '?post_type=property&search_keyword=' . $search_keyword );
exit;

Код exit рекомендуется в Справочнике функций.

5 июн. 2013 г. 16:18:06