如何在多站点安装的1个子站点上保护与自定义帖子类型相关的帖子附件,使其不被非登录用户访问?

时间:2012-04-24 作者:Andrew

我正在网站中开发一个简单的“会员专用”部分,唯一的目的是允许客户为其会员发布文件。我很快意识到,在WordPress中,帖子的附件本身并没有受到任何保护。例如,如果用户未登录,并且知道文件的直接url,则可以访问该文件/与其他人共享该文件。这是一个大问题,因为文档对客户的业务相当敏感。

正在使用您期望的所有工具构建成员区域-一个自定义页面模板与当前的\\u user\\u can条件、wp\\u重定向、使用成员插件的自定义角色,以及“文件”帖子的自定义帖子类型。自定义帖子类型中的每个文件帖子都有元盒,客户端可以使用这些元盒附加文件/文档(.jpg、.gif、.pdf等)。我正在使用WPAlchemy 它的媒体访问类可以满足metabox的要求。

会员区将在多站点安装中的一个特定站点上运行,该站点共包括3个站点(均与同一家公司相关)。

如果有人能把我引向正确的方向,我将不胜感激。我不喜欢使用一系列插件,因为我喜欢保持简单,并且喜欢知道代码实际上在做什么。我也意识到这不一定是一个WordPress问题,更像是一个.htaccess 问题(正如我从我遇到的问题和他们的答案中看到的),但我忍不住认为我的问题不同,因为它涉及多站点,并且可能需要一个单独的上传文件夹。

以下是我到目前为止对保护附件的想法:

我可以以某种方式创建一个单独的媒体上载目录,元盒可以从自定义帖子类型中的每个帖子将文件上载到该目录。由于这些文件与其他网站的媒体上传分开(只需要保护成员的附件),因此使用将更容易保护该文件夹。htaccess。

1.1。是某种。htaccess修改是一种必然的方式吗?

1.2。我怎样才能真正创建单独的媒体上载目录,并让WPAlchemy的元盒在这里上载文件?我见过一个uploads_dir 过滤器挂钩,但不确定如何使用。

与其如上所述创建单独的媒体上载目录,不如只保护属于我的自定义帖子类型的附件?但我不知道这和。htaccess解决方案。似乎有一个单独的文件夹会更容易。。。

我看到了以下与我自己的问题非常相似的问题:

  1. How to Protect Uploads, if user is not Logged In?

    看起来它处理的是WP的非多站点安装,而且整个站点是一个成员区域,而不是我站点的一部分。记住,我不希望所有上传都受到保护,只希望那些附加到自定义帖子类型的上传。我确实喜欢passing requests through a php script? 也许我可以使用这个脚本并修改它,以便在我的多站点安装中的1站点上使用单独的上载目录?

  2. Protect Uploads in Multisite

  3. How to restrict access to uploaded files?

Update:

建立this thread 但没有解决办法。如果我能让它工作起来,似乎是更好的方式。在我设法保护了站点的所有文件之后,我将研究如何将文件上载到新的上载目录

1 个回复
SO网友:Adam

安德鲁,

如果自定义帖子类型仅存在于多站点安装的一个子站点上,则可以在控制自定义帖子类型的显示和输出的模板文件中使用简单的条件函数,如;

是单数(\'post\\u type\\u name\')

  • is\\u user\\u logged\\u in()
  • 。。。事实上,它可能很简单:;

    <?php if(is_user_logged_in()) : ?>
    
    <?php echo wp_get_attachment_url( 12 );?>
    
    <?php else : ?>
    
    //Do what you want here, such as nothing or redirect to login page or alert user that some content is hidden etc.
    
    <?php endif;?>
    
    希望这是沿着你正在寻找的路线。如果解决方案没有那么简单,请让我知道,我们将深入挖掘。

    PS.用任何适合您目的的内容替换wp\\u get\\u attachment\\u url();

    wp\\u get\\u attachment\\u metadata()wp\\u read\\u image\\u metadata()wp\\u get\\u attachment\\u image()wp\\u get\\u attachment\\u image\\u src()wp\\u get\\u attachment\\u thumb\\u file()wp\\u get\\u attachment\\u thumb\\u url()wp\\u get\\u attachment\\u link()wp\\u get\\u attachment\\u\\u url()@法典。。。HERE

    注意或。。。在使用WPAlchemy的情况下,您将替换上面的wp\\u get\\u附件。。。而不是使用自定义元盒代码。

    <?php custom_metabox->the_field(\'name\'); ?>
    

    结束

    相关推荐

    管理WordPress MultiSite中的数据库表

    我正在开发一个插件,它可以在数据库表中创建和存储一些数据(使用global$wpdb->base\\u前缀)。在WordPress multisite中,我希望子网站所有者只能访问他们创建的数据。处理这个问题的最佳方法是什么?我应该为每个子网站创建新表,还是向表中添加“blog\\u id”列并每次检查?谢谢你的帮助。