Intereting Posts

Как перенаправить пользователей без входа для входа в систему с помощью post_password_required ()

Я создал сайт членства, который работает так, как хотелось бы, если бы не члены не могли просматривать личные страницы.

Тем не менее, я хочу, чтобы тот, кто не вошел в систему, нажимает на ссылку, которая ссылается на личную страницу, они должны быть направлены на мою страницу входа.

Самое близкое, что я могу выяснить, это использовать post_password_required (), но он, похоже, не работает.

Я не хочу скрывать ссылки от нечленов.

function redirect_to_login() { if( post_password_required( get_the_ID() ) ) { wp_redirect( "index.php?p=50" ); } } add_action('wp', 'redirect_to_login'); 

Solutions Collecting From Web of "Как перенаправить пользователей без входа для входа в систему с помощью post_password_required ()"

Функция, которую вы используете – post_password_required – верна для страниц с защитой паролем , а не для личных страниц. Я честно не уверен, что вы имеете в виду, но если вы имеете в виду «частный», как в большинстве ваших описаний, тогда …

Я не знаю о функции is_private но вы можете проверить сам пост-объект. Однако есть уловка. «Частные» должности защищены от бешенства. Пользователь без разрешения на просмотр сообщения получит 404. Я думаю, что следующее будет работать, но из-за характера «частных» сообщений это может все еще быть ошибкой. Он не подвергался жесткой проверке.

 function redirect_to_login() { global $wp_query,$wpdb; if (is_404()) { $private = $wpdb->get_row($wp_query->request); if( 'private' == $private->post_status ) { wp_safe_redirect(home_url(get_permalink(188))); die; } } } add_action('template_redirect', 'redirect_to_login'); 

Попробуйте что-то подобное в заголовке или соответствующем файле шаблона:

 $not_auth_redirect = get_permalink(8); // some page's id if(!is_user_logged_in() && post_password_required(get_the_ID()) { wp_redirect( $not_auth_redirect ); } 

Вы можете установить идентификатор на свою домашнюю страницу или на страницу с призывом к действию, а затем перенаправить туда людей, если они не вошли в систему. И это обязательная запись.

У меня была точно такая же проблема, и я нашел для нее довольно аккуратное решение. При исследовании, как WordPress точно обрабатывает «Private-404», я нашел, что указанное сообщение находится в queried_object. Поэтому вы можете проверить это. Поэтому в вашем файле 404.php выполните следующие действия:

 $queried = get_queried_object(); if (is_a($queried, 'WP_Post') && $queried->post_status == 'private') { // Set correct header header('HTTP/1.0 403 Forbidden', true); // Show login form here or redirect to } else { // show 404-page }