bbPress Частный форум Перенаправление на вход

Изменить: вот как это сделать, если вы используете префикс 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;
    }
  }
}

Спасибо!


person Sean Foust    schedule 09.11.2017    source источник
comment
Согласно документации о template_redirect: Этот хук действия выполняет только до того, как WordPress определит, какую страницу шаблона загрузить . Насколько я понимаю, это действие будет выполняться только тогда, когда страница будет перенаправлена. По умолчанию WP 404 не перенаправляет пользователя, что означает, что is_404() не будет правдой.   -  person Magnus Eriksson    schedule 09.11.2017
comment
Спасибо за ответ Магнус! Похоже, потому что он выполняется заранее и вызывает это is_404, потому что я смог заставить его работать с приведенным ниже ответом.   -  person Sean Foust    schedule 10.11.2017


Ответы (1)


Вот код, который я использую: // Redirect private bbPress forum to specific page. add_action('template_redirect', 'private_content_redirect_to_login', 9); function private_content_redirect_to_login() { global $wp_query,$wpdb; if (is_404() and !is_user_logged_in()) { $host = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; $path = dirname($_SERVER['REQUEST_URI']); $forums = "forum"; $location = "redirect to the URL of your choice"; } if(strpos( $path, $forums ) !== false){ wp_safe_redirect($location); exit; } }

Кстати, вот учебник: https://www.easywebdesigntutorials.com/hide-buddypress-pages-and-bbpress-forums-from-not-logged-in-users/

person Paal Joachim Romdahl    schedule 21.10.2018