Поддержка Проблемы и решения Редирект с личных записей

  • Решено 1596754as98

    (@adminstrelok)


    Если неавторизованный пользователь пытается перейти на URL записи, помеченной как «Личная», происходит редирект на страницу 404.

    Как изменить этот редирект на произвольный URL?

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Как-нибудь так:

    add_filter('template_redirect', 'my_template_redirect' );
    function my_template_redirect() {
        global $wp_query;
        if ($wp_query->post->post_status == 'private' && !is_user_logged_in()) {
            wp_redirect('http://google.ru');
            exit();
        }
    }

    В принципе работает…. Но принципиально не то. Перебрасывает на Гугл и меня, как вошедшего на сайт автора записи.

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Я поправил ответ, добавил проверку !is_user_logged_in()

    Я поправил ответ, добавил проверку !is_user_logged_in()

    Теперь не работает. По прежнему 404 (для постороннего)

    Нашел такое решение:

    add_action('template_redirect', 'private_content_redirect_to_login', 9);
    function private_content_redirect_to_login() {
      global $wp_query,$wpdb;
      if (is_404()) {
        $private = $wpdb->get_row($wp_query->request);
        $location = wp_login_url($_SERVER["REQUEST_URI"]);
        if( 'private' == $private->post_status  ) {
          wp_safe_redirect($location);
          exit;
        }
      }
    }

    Но это редирект на страницу авторизации. Никак не получается в этом коде заменить wp_login_url на произвольный

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Никак не получается в этом коде заменить wp_login_url на произвольный

    Предположу, что вот так:

    add_action('template_redirect', 'private_content_redirect_to_login', 9);
    function private_content_redirect_to_login() {
      global $wp_query,$wpdb;
      if (is_404()) {
        $private = $wpdb->get_row($wp_query->request);
        $location = 'http://google.ru';
        if( 'private' == $private->post_status  ) {
          wp_redirect($location);
          exit;
        }
      }
    }

    нет?

    denisco! Гениально! Оно заработало!
    Открою маленький секрет — таким образом с Вашей помощью немного модернизирован плагин https://wordpress.org/plugins/private-content-login-redirect/

    Спасибо за помощь!

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Редирект с личных записей» закрыта для новых ответов.