我有一个简单的问题要问。
我已经设置了一个自定义主题的wordpress网站,该网站具有设置“私人/公共”帖子的功能,因为您可以猜测所有标记为私人的帖子只能由登录的用户看到,公众每个人都可以见。
我是如何完成此操作的,使用自定义字段“访问”,每个帖子都可以在编辑帖子屏幕中将此自定义字段设置为私有或公共字段。然后,为了显示这些帖子,我使用“is_user_logged_in()”条件语句运行自定义循环查询。该陈述是真的我包括所有“访问”字段设置为“私人/公共”的帖子,如果语句失败,即用户未登录,只包括“访问”设置为公开的帖子。我对所有单页循环等使用了类似的循环查询。
现在虽然这是一种享受,但我担心这种方法的安全性。那是你的帮助。你认为这有多安全?是否很容易欺骗循环向未登录的用户显示私人帖子?您是否可以推荐一种更安全的方式来处理私人/公共帖子,这些帖子可以由后端的一定数量的用户设置?
非常感谢。
罗布。
答案 0 :(得分: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中已经有一个默认位置,其中定义了“private”。所以没有必要在别处定义它(比如自定义字段)。
您甚至可以使用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
}
此功能只使用posts_where
过滤器来简化查询。 Codex Link
您可以根据需要进行修改(添加/删除条件/用户级别/用户控制