2

我有一个快速的问题要问。

我已经设置了一个带有自定义主题的 wordpress 站点,该站点具有设置帖子“私人/公共”的功能,您可以猜到所有标记为私人的帖子只能由登录的用户看到,而公开的每个人都可以看到。

我如何做到这一点是使用自定义字段“访问”,并且每个帖子都可以在编辑帖子屏幕中将此自定义字段设置为私有或公共。然后为了显示这些帖子,我使用“is_user_logged_in()”条件语句运行自定义循环查询。如果该声明是正确的,我将包含所有“访问”字段设置为“私有/公共”的帖子,如果该语句失败,即用户未登录,则仅包含“访问”设置为公共的帖子。我对所有单页循环等都使用了类似的循环查询。

现在,虽然这是一种享受,但我担心这种方法的安全性。那是你的帮助。你认为这有多安全?是否容易欺骗循环向未登录的用户显示私人帖子?您能否推荐一种更好更安全的方式来处理可由后端选定数量的用户设置的私人/公共帖子?

非常感谢的想法。

抢。

4

1 回答 1

1

也许我理解错了,但是——

您所描述的就像私人帖子的 wordpress 默认行为一样。

因此,我真的不明白您为什么需要一个自定义字段。

自定义字段有被 [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 您可以根据需要对其进行修改(添加/删除条件/用户级别/用户控制

于 2013-05-08T00:59:57.360 回答