Как-нибудь так:
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();
}
}
В принципе работает…. Но принципиально не то. Перебрасывает на Гугл и меня, как вошедшего на сайт автора записи.
Я поправил ответ, добавил проверку !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 на произвольный
Никак не получается в этом коде заменить 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/
Спасибо за помощь!