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

天津市建设工程质量安全监督管理总队网站百度seo

天津市建设工程质量安全监督管理总队网站,百度seo,网站的大量图片存储格式,服装网站建设论文这篇文章也可以在我的博客中查看 本文内容 在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.hkea.cn/news/736228/

相关文章:

  • 个人建网站允许吗seo职位要求
  • 环保网站设计网络营销优化推广
  • 网页设计网站制作公司冯耀宗seo视频教程
  • 怎么用路由器做网站百度指数平台官网
  • 济南做网站互联网公司有哪些seo是什么公司
  • 辛集seo网站优化价格许昌网站seo
  • 网站建设后期维护百度快速收录技术
  • 网站建设中的推广工作seo学校培训
  • 上海专业网站建设网百度搜索推广开户
  • 做学校网站素材图片合肥seo代理商
  • 真题真做报名网站淘宝搜索关键词排名
  • 免费的黄冈网站有哪些平台?培训行业seo整站优化
  • 寿县住房与城乡建设局网站真正免费的网站建站平台
  • 常德seo招聘网站seo站长工具
  • 网站开发多久完成俄罗斯搜索引擎yandex推广入口
  • 漳州做网站建设建网站免费
  • 网站建设服务上海广州软文推广公司
  • 做一个网站app需要多少钱web制作网站的模板
  • 网站建设的财务计划新媒体营销策略有哪些
  • 网站建设分金手指专业二八宁波品牌网站推广优化
  • 清远网站建设公司百度游戏风云榜
  • 网上可以自学什么技术win7系统优化软件
  • 嘉兴建站软件如何做好企业网站的推广
  • 在凡科做网站短视频推广
  • 深圳推广公司推荐q群排名优化软件
  • 什么网站做简历模板宁德市医院
  • 用什么软件做公司网站游戏推广赚佣金的平台
  • 购物网站 后台模板河北seo技术培训
  • 聊城建设委员会官方网站google seo
  • 广西建设网郭业棚seo推广具体做什么