除了两个页面之外,限制访问我的网站的最佳做法是什么

What are the best practices to restrict access to my website except for two pages

我正在使用 Bedrock/Timber/ACF 在 Wordpress 上构建网站。 该网站的大部分内容都受到限制。

有 4-5 个页面可供匿名用户使用(主页、联系人、登录和 legal/privacy 政策页面)。

我目前使用 Timber 路由管理它,例如:

Routes::map('/blog/page/:num/', function ($params) {
    if (!is_user_logged_in()) {
        wp_redirect(home_url().'/login');
        exit();
    }
    $user = wp_get_current_user();
    if ($user->roles[0]=="subscriber") {
        $post_type="publish";
    } else {
        $post_type="any";
    }
    $query = 'order=ASC&orderby=title&paged='.$params['num'].'&post_status='.$post_type;
    Routes::load('list-blog.php', $params, $query, 200);
});

但是我不知道这是否是个好方法,因为我不能使用 wordpress 模板层次结构,在管理员方面,每次我想创建一个新页面时,我都必须创建路径...

所以我的解决方案不灵活且难以维护...

你有什么建议吗?

编辑: 我几乎通过使用 wordpress 模板层次结构删除了所有路由。但我仍然有路由 link 到登录页面,因为我不想拥有 mysite.com/wp/login 但 mysite.com/login.

我会使用 array_key_exists 而不是检查第一个变量,因为在某些情况下订阅者角色是第二个。

如果您使用的是 ACF,您可以尝试向您的页面添加一个复选框字段并查询该字段的变量。

https://www.advancedcustomfields.com/resources/query-posts-custom-fields/

Routes::map('/blog/page/:num/', function ($params) {

    if (!is_user_logged_in()) {
        wp_redirect(home_url().'/login');
        exit();
    }

    $user = wp_get_current_user();  
    $post_type = array_key_exists("subscriber", $user->roles) ? "publish" : "any";

    $query = 'order=ASC&orderby=title&paged='.$params['num'].'&post_status='.$post_type;
    Routes::load('list-blog.php', $params, $query, 200);
});