当前位置: 首页 > news >正文

沧州建设网站公司手机百度正式版

沧州建设网站公司,手机百度正式版,贵港网站建设公司,棋牌游戏app软件开发这篇文章也可以在我的博客中查看 本文内容 在WordPress中存在层级文章的设定,常见于:Page、Custom Post Type 有时候我们需要让子文章的访问权“继承”于父文章,即: 当父文章为私有、草稿时,子文章也无法被公开访问…

这篇文章也可以在我的博客中查看

本文内容

在WordPress中存在层级文章的设定,常见于:Page、Custom Post Type

有时候我们需要让子文章的访问权“继承”于父文章,即:

  1. 当父文章为私有、草稿时,子文章也无法被公开访问
  2. 当父文章为公开时,子文章的访问性应由自己决定

具体做法

做法1

将子文章的状态设置为inherit

一般情况下,inherit主要用于attachment等附属于主文章的内容,但事实上任何文章都可以设置为inherit

你可以通过以下代码实现:

if ($post_id) {$post_data = array('ID' => $post_id,'post_status' => 'inherit',);wp_update_post($post_data);
}

但并不推荐这么做,因为:

  1. 这个状态本身只预留给附属物
  2. 当文章是这个状态时,它不会出现在你的文章列表
  3. 在多层次结构时,不知道会发生什么事情(我没试过)

做法2

在某个hook中检测当前文章的父文章/祖先文章的状态,再检测当前用户的访问权限,最后根据结果决定是否驳回。

检测父文章状态

我们可以使用get_post_ancestors()获取文章的各级祖宗,返回是个list

$ancestors = get_post_ancestors($post->ID);

检测当前用户权限

Role Capabilities

是什么权限?
是使用current_user_can()检测用户是否有私有读权限吗?
并不是,如果只检测角色权限(Role Capabilities),那作者本人或者其它有编辑权限的人也可能会被拦截。

那难道我们就不能用current_user_can()了?
也不是

虽然这个函数在官方文档中非常隐晦,而且看起来它只能按类别处理权限
但其实不是,它可以按实体处理权限

换言之,它可以实现:用户对“某文章”是否有访问权限

Meta Capabilities

这个东西称为元权限(Meta Capabilities
它并不实际存储于任何位置,而是在使用时实时计算,并最终转换为角色权限处理

事实上current_user_can()可以接受role或者meta作为参数

我不知道为什么这么重要的东西在官网找不到
但你可以在这里找到对这个函数更详细的使用介绍

比如我们的目标,检测用户对某私有文章是否有访问权限:

current_user_can('read_post', $private_post_id)

它会检测当前用户是否为作者等有编辑能力的人,随后检测是否有私有读权限

一次满足三个愿望,爽到

最终做法

我将以继承根文章的访问权限作为例子
如果你需要继承其它层级,你需要做一些小改动

  1. 首先找一个最快能获取当前文章ID的hook:
  • 使用pre_handle_404可以最快地在主查询后访问结果
  1. 找到根文章
  2. 检测当前用户是否有访问根文章的权限
  • 若有,完事;若没有,返回404
    • 关于如何返回404,你可以看我的这篇文章

所以我们可以写出这样的代码:

add_filter('pre_handle_404', function ($_, $wp_query) {if (empty($wp_query->post))return false;$ancestors = get_post_ancestors($wp_query->post->ID);$ancestor_id = end($ancestors);// 是子文章,且无权访问爷/爹if ($ancestor_id && !current_user_can('read_post', $ancestor_id)) {//清空文章$wp_query->posts = [];unset($wp_query->post);$wp_query->post_count = 0;//设置404$wp_query->set_404();status_header(404);nocache_headers();}return false;
}, 10, 2);

参数$wp_query中存储了当前的文章
如果压根没有文章,我们提前返回
否则就检测用户对根文章的访问权限

使用get_post_ancestors()获得各级祖先,再用end()得到最后一个元素,即根文章
若根文章是私有/草稿,且用户无访问权限,我们就返回404

http://www.zhongyajixie.com/news/24132.html

相关文章:

  • 网络策划公司官方正版清理优化工具
  • 医院关于建设官方网站的请示做网站用什么软件
  • 深圳宝安房价seo零基础视频教程
  • 徐州市鼓楼区建设局网站第三方网络营销平台有哪些
  • 许昌网站建设汉狮套餐推广平台有哪些渠道
  • 哪个网站开发是按月付费的成功的网络营销案例及分析
  • 大型企业名录查询seo网站优化方案书
  • 做网站很挣多少钱朝阳区搜索优化seosem
  • 网站建设和网站开发的区别电商运营培训课程有哪些
  • 网站挂黑链百度官网网站首页
  • 重庆网站建设网络推广关键词吉他谱
  • 安徽疫情最新消息情况网站seo外包价格
  • 一站式做网站哪家强网站提交
  • 兰州网站的优化长沙seo免费诊断
  • 长安网站建设哪家好百度投诉中心24人工
  • 公司做彩票网站违法吗网络热词英语
  • 世纪佳缘网站模板企业建站
  • 广安哪里做网站关键词排名优化顾问
  • 西安网站开发培训多少钱移动端优化
  • 设计一个网站代码seo网络推广公司报价
  • 赤水网站建设seo如何优化关键词上首页
  • 高端网站建设 飞沐新闻媒体发稿平台
  • 用网站的源代码怎么做网站站长工具百度百科
  • 如何做个人网站淘宝关键词排名怎么查询
  • 上海网站备案号查询网络事件营销案例
  • 网站设计风格确认书在线友情链接
  • 自己做家具展示网站金泉网做网站多少钱
  • 网站建设策划书ppt宜兴百度推广公司
  • 网站建设平台中央直播如何去做网络推广
  • 做名片最好的网站是哪个软文外链代发