2013-05-07 125 views
2

我有一个简短的问题要问。WordPress的私人/公共信息安全。

我已经设置了一个WordPress的自定义主题网站,它具有设置帖子“Private/Public”的功能,你可以猜到所有被标记为私人的帖子只能被登录的用户看到,可以看到。

我是如何实现这一点的,使用自定义字段“访问”,每个帖子都可以在编辑帖子界面中将此自定义字段设置为私人或公共。然后为了显示这些帖子,我运行了一个带有“is_user_logged_in()”条件语句的自定义循环查询。它的声明是真实的我包括设置为“私人/公共”的“访问”字段的所有职位,如果语句失败,即用户没有登录,只包括“访问”设置为公开的职位。我已经使用类似的循环查询所有单页循环等

现在虽然这项工程治疗我担心这种方法是多么安全。那是你的帮助进来的。你认为这有多安全?是否容易欺骗循环显示私人帖子给未登录的用户?您是否可以考虑更安全地处理私人/公共帖子的方法,这些私人/公共帖子可以由后端的一定数量的用户设置?

想法非常赞赏。

Rob。

+0

对不起,但我不明白你为什么需要一个特殊的自定义主题与此功能。 WordPress的默认行为?或者我理解错了吗?http://codex.wordpress.org/Content_Visibility – 2013-05-08 00:27:08

+0

我已经尝试使用WordPress的私人发布功能,但我不能得到私人消息显示在登录用户的前端谁有权访问他们可以在后台看到帖子,但没有在主页上的循环帖子等等?是否有无论如何允许用户组称“订阅者”能够在登录时看到前端的私人帖子,而不是当没有登录? – invamped 2013-05-08 00:59:29

回答

1

也许我的理解都错了,但 -

什么,你形容就像是wordpress的Default behavior for private posts

因此,我不太了解你需要一个自定义字段。

自定义字段有被习惯用于家居[AB],即使不需要:-)

话虽这么说,你可以使用post_status()函数来检查你的状态

if (get_post_status ($ID) == 'private') 
    { 
    // this is 'private'; 
    } 
    else 
    { 
    // this is public 'public'; 
    } 

所以,你可以使用

get_post_status (get_the_ID()) 

,或者如果你想要把它在循环的头部the_post()部分之后:

if(get_post_status()=='private') continue; 

如果需要,你可以用is_user_logged_in()来包装它。

要点是,在wordpress中已经有一个默认的地方,其中“私人”被定义。所以没有必要在其他地方定义它(如自定义字段)。

你甚至可以创建register_post_status()自己的自定义后的状态..

最好的办法但是恕我直言,是过滤所有的职位上posts_where

add_filter('posts_where', ' privates_control'); 

function privates_control($where) { 
    if(is_admin()) return $where; 

    global $wpdb; 
    return " $where AND {$wpdb->posts}.post_status != 'private' "; // or add your custom status 
} 

此功能只需使用mofifies查询posts_where过滤器。Codex Link 你可以根据你的需要修改它(添加/删除条件/用户级别/用户控制

+0

非常感谢您的帮助,我原先设定了这个时间,现在我已经忘记了为此使用自定义字段的原因。我知道有什么!然而,我再次使用wordpress的私人功能,因为我同意自定义字段的使用,它会更好地使用内置函数。再次欢呼 – invamped 2013-05-08 01:27:00

+0

嗨,很抱歉再次提问。但是,你会开始解释你的功能以及如何使用它?我将如何包含登录用户的所有私人帖子?非常感谢:) – invamped 2013-05-08 01:42:22

+0

非常感谢puttin gme在正确的轨道:)我似乎有这个工作...有点。现在我试图添加第二个循环查询到具有不同参数的同一页面,但这似乎忽略了post_where,我不认为我可以过滤?再次感谢 – invamped 2013-05-08 06:18:50