Изменить: вот как это сделать, если вы используете префикс slug для своих форумов (измените «форумы», если используете другой slug). Этот код также перенаправляет пользователя для входа в систему и обратно на страницу, на которой он был, для личных страниц / сообщений.
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);
$host = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
$path = dirname($_SERVER['REQUEST_URI']);
$forums = "forums";
$location = wp_login_url($_SERVER["REQUEST_URI"]);
if( 'private' == $private->post_status ) {
wp_safe_redirect($location);
exit;
}
}
if(strpos( $path, $forums ) !== false){
wp_safe_redirect($location);
exit;
}
}
Я пытаюсь заставить WordPress перенаправить пользователя со страницы 404 по умолчанию, которая отображается, когда пользователь не вошел в систему, но пытается просмотреть частную тему. Я очень новичок в PHP, и я не могу понять, почему приведенный ниже код не работает, он также должен перенаправить их на страницу, которую они пытались увидеть после входа в систему. Я видел, что этот вопрос задавали несколько раз, но нет ответов.
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->bbp_private_post_status ) {
wp_safe_redirect($location);
exit;
}
}
}
Спасибо!
template_redirect
: Этот хук действия выполняет только до того, как WordPress определит, какую страницу шаблона загрузить . Насколько я понимаю, это действие будет выполняться только тогда, когда страница будет перенаправлена. По умолчанию WP 404 не перенаправляет пользователя, что означает, чтоis_404()
не будет правдой. - person Magnus Eriksson   schedule 09.11.2017