如何使用密码保护除徽标以外的所有内容

时间:2018-04-05 作者:Zeth

我已经研究了几个插件,但没有一个是符合条件的。加我最好自己在代码中这样做(以确保安全)。我正在制作一个网站,它应该是一个实习生CRM系统,内置于WordPress中。我有一个定制的父主题,所以我正在创建一个子主题,它应该将所有内容放在登录墙后面(菜单、页脚、侧边栏、所有帖子类型,你可以命名)。

我考虑过只需检查所有代码,并将其应用于所有内容:

if ( is_user_logged_in() ) {
  <nav class="header-nav">
    <?php
    wp_nav_menu(
      array(
        \'theme_location\'  => \'header-menu\',
        \'fallback_cb\'     => false,
        \'container_class\' => \'menu-header-menu-container\',
        )
      );
    ?>
  </nav>
}
但这似乎很麻烦。此外,如果有人“猜测”到图像的URL,那么他们仍然能够看到。

我是否错过了一些明显/更好的方法?

1 个回复
最合适的回答,由SO网友:Andy Macaulay-Brook 整理而成

重定向网页

您可以通过将其挂接到主题中的所有模板来保存代码。

function wpse299924_redirect() {
    if( !is_user_logged_in() ) {
        wp_redirect( wp_login_url() );
        die;
    }
}
add_action( \'template_redirect\', \'wpse299924_redirect\' );
您是对的,任何知道URL的人都可以访问您的图像和其他媒体,但这会将所有页面重定向到未登录用户的登录页面。

重定向媒体(Apache web服务器上的)WordPress permalinks依赖于Apache设置,通常位于站点的。htaccess文件,将所有URL重定向到主WordPress索引。php文件,然后将其处理为WP查询,该查询将返回您要查找的网页。对任何图像执行此操作都是浪费,因此有两种方法。如果请求的文件或目录存在,则专门绕过WP的htaccess行:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
如果请求的文件名或目录作为站点的真实文件(或目录)存在,那么Apache将直接为其提供服务,而根本不运行WP。

您可以删除这些行(使用mod_rewrite_rules 过滤器)强制WP为您处理媒体URL,但您需要编写适当的永久链接重写模式,并在检查用户登录后自己返回适当的图像文件。

结束