Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
WordPress管理栏与用户权限深度定制指南_创想鸟

WordPress管理栏与用户权限深度定制指南

WordPress管理栏与用户权限深度定制指南

本文详细介绍了如何在WordPress中为特定用户角色定制管理栏(Admin Bar)的显示内容,以及如何通过管理用户角色和权限(Capabilities)来精细控制用户对后台功能的访问。教程涵盖了使用admin_bar_menu钩子直接移除管理栏节点的方法,并结合用户角色判断实现差异化显示;同时,深入探讨了利用WP_Role类增删改用户权限,从而从根本上管理用户对特定功能的访问权限,并提供了创建自定义用户角色的示例。

在wordpress网站的运营中,为了提升用户体验、增强安全性或简化后台操作,经常需要根据不同的用户角色来定制其所见的功能和内容。其中,管理栏(admin bar)是用户登录后在页面顶部显示的一个重要导航工具,但对于某些非管理员角色,其上的部分链接可能是不必要甚至是干扰的。本教程将深入探讨两种主要的定制方法:直接控制管理栏节点的显示,以及通过用户角色与权限(capabilities)管理来从根本上控制用户访问。

一、 直接控制管理栏节点显示

WordPress提供了一个强大的钩子admin_bar_menu,允许开发者在管理栏菜单项被渲染之前进行修改。通过这个钩子,我们可以移除管理栏上的特定节点,并结合用户角色判断,实现对不同角色的差异化显示。

1. 基本移除方法

使用$wp_admin_bar->remove_node()或$wp_admin_bar->remove_menu()函数可以移除管理栏上的指定节点。这些函数需要传入要移除的节点ID。

add_action( 'admin_bar_menu', 'custom_remove_wp_nodes', 999 );function custom_remove_wp_nodes() {    global $wp_admin_bar;    // 移除“新建”菜单下的特定子项    $wp_admin_bar->remove_node( 'new-post' );    // 新建文章    $wp_admin_bar->remove_node( 'new-link' );    // 新建链接    $wp_admin_bar->remove_node( 'new-media' );   // 新建媒体    $wp_admin_bar->remove_node( 'new-page' );    // 新建页面 (注意:原问题中使用了remove_menu,但remove_node更常用)    // 移除评论链接    $wp_admin_bar->remove_node( 'comments' );    // 移除站点名称菜单(如果不想让非管理员看到)    $wp_admin_bar->remove_node( 'site-name' );     // 移除“所有内容”或“新建内容”等通用节点,具体ID可能因插件或主题而异    $wp_admin_bar->remove_node( 'new-content' );     // 示例中提到的 'new-gry' 可能是自定义节点,需要确认其ID    // $wp_admin_bar->remove_node( 'new-gry' ); }

注意事项:

add_action的第三个参数999是优先级。设置一个较高的优先级可以确保我们的函数在其他插件或WordPress默认功能添加节点之后执行,从而确保能够成功移除。要移除的节点ID需要准确。可以通过查看页面源代码或使用浏览器开发者工具来检查管理栏元素的ID。

2. 根据用户角色条件移除

上述代码会对所有用户生效。为了仅对特定用户角色(例如,自定义的“gamer”角色)隐藏这些节点,我们需要引入条件判断。WordPress提供了current_user_can()函数来检查当前用户是否拥有某个权限或属于某个角色。

add_action( 'admin_bar_menu', 'custom_remove_wp_nodes_for_roles', 999 );function custom_remove_wp_nodes_for_roles() {    global $wp_admin_bar;    // 获取当前用户对象    $current_user = wp_get_current_user();    // 检查当前用户是否不具备 'manage_options' 权限(通常只有管理员拥有此权限)    // 或者检查用户是否属于特定的自定义角色,例如 'gamer'    if ( ! current_user_can( 'manage_options' ) || current_user_can( 'gamer' ) ) { // 假设gamer角色不应看到这些        $wp_admin_bar->remove_node( 'new-post' );        $wp_admin_bar->remove_node( 'new-link' );        $wp_admin_bar->remove_node( 'new-media' );        $wp_admin_bar->remove_node( 'new-page' );        $wp_admin_bar->remove_node( 'comments' );        $wp_admin_bar->remove_node( 'new-content' );        $wp_admin_bar->remove_node( 'site-name' );        // $wp_admin_bar->remove_node( 'new-gry' ); // 如果存在此自定义节点    }}

关键点:

current_user_can(‘gamer’):检查当前用户是否拥有名为“gamer”的角色。请注意,current_user_can()实际上是检查用户是否拥有某个能力(capability),而不是直接的角色名。然而,WordPress在内部会将角色名映射到同名的能力,所以这种用法在很多情况下是有效的。更严谨的做法是检查用户是否拥有某个角色所特有的能力。! current_user_can( ‘manage_options’ ):这是一个更通用的方法,因为manage_options通常是管理员独有的权限。如果用户没有这个权限,就隐藏管理栏项目。

二、 通过用户角色与权限管理

直接移除管理栏节点只是隐藏了前端的显示,但如果用户直接访问对应的后台URL(例如/wp-admin/edit-comments.php),他们可能仍然能够访问。要从根本上限制用户对特定功能的访问,我们需要管理他们的权限(Capabilities)。WordPress的用户角色系统是基于权限的。

1. 理解权限(Capabilities)

每个WordPress用户角色都关联了一组权限,例如edit_posts(编辑文章)、publish_posts(发布文章)、manage_options(管理选项)等。通过修改这些权限,我们可以精确控制用户在后台能做什么。

2. 使用WP_Role类管理权限

WP_Role类提供了编程方式来添加、移除或检查某个角色的权限。

// 获取角色对象// get_role( $role_name ) 函数用于获取指定角色的WP_Role对象$role_object = get_role( 'editor' ); // 例如,获取“编辑”角色// 为此角色添加一个权限// add_cap( $capability_name, $grant = true )// $grant 参数如果设置为 false,则明确移除该权限$role_object->add_cap( 'custom_capability_name' ); // 从此角色移除一个权限// remove_cap( $capability_name )$role_object->remove_cap( 'custom_capability_name' ); 

示例:授予管理员unfiltered_html权限

在WordPress多站点模式下,unfiltered_html权限(允许用户在内容中插入未过滤的HTML,包括SCRIPT和IFRAME标签)默认只授予超级管理员。如果你想让单站点模式下的管理员也拥有此权限,可以这样做:

// 获取管理员角色对象$admin_role = get_role( 'administrator' );// 授予管理员 unfiltered_html 权限// 建议此代码只运行一次,例如在主题激活或插件激活时if ( ! $admin_role->has_cap( 'unfiltered_html' ) ) {    $admin_role->add_cap( 'unfiltered_html', true );}

注意事项:

对权限的修改是持久化的,会存储在数据库中。因此,上述代码通常只需要运行一次(例如,在主题的functions.php中,但最好包裹在一个条件判断里,或者在插件激活钩子中执行),而不是每次页面加载都执行。如果将代码直接放在functions.php中,每次主题更新时可能会丢失,推荐使用自定义插件来管理这些功能。

3. 创建和定制自定义用户角色

除了修改现有角色的权限,你还可以创建全新的用户角色,并为其分配特定的权限集。

/* 示例:添加一个名为“专业用户”的自定义角色 */add_action( 'after_setup_theme', 'add_custom_professional_role' );function add_custom_professional_role() {    // 检查角色是否已存在,避免重复添加    if ( ! get_role( 'professional' ) ) {        add_role(            'professional', // 角色ID            '专业用户',     // 角色显示名称            array(                'read'                   => true,  // 允许阅读网站内容                'edit_posts'             => true,  // 允许编辑自己的文章                'delete_posts'           => true,  // 允许删除自己的文章                // 'edit_published_posts' => true, // 允许编辑已发布的文章(如果需要)                // 'publish_posts'        => true, // 允许发布文章(如果需要)                // 'edit_files'           => true, // 允许编辑文件(不建议给予非管理员)                'upload_files'           => true,  // 允许上传文件                // 更多权限...            )        );    }}// 如果需要移除自定义角色,可以使用 remove_role()// remove_role( 'professional' ); // 谨慎使用,会删除角色及其所有权限

最佳实践:

将角色和权限相关的代码放入主题的functions.php文件或自定义插件中。对于持久性修改,最好确保代码只在必要时运行一次(例如,通过检查角色是否存在或使用插件激活/停用钩子)。在创建自定义角色时,从一个现有角色(如“订阅者”或“作者”)的权限开始,然后根据需要添加或移除权限,这样可以避免遗漏一些基本权限。对于复杂的权限管理,可以考虑使用WordPress权限管理插件,如”User Role Editor”等,它们提供了图形界面来管理角色和权限。

总结

定制WordPress管理栏和用户权限是优化网站后台管理的关键步骤。通过结合使用admin_bar_menu钩子和WP_Role类,开发者可以灵活地控制用户界面和后台功能的访问权限。直接移除管理栏节点适用于简单的界面隐藏,而通过管理用户权限则提供了更深层次、更安全的访问控制。理解并熟练运用这两种方法,将帮助你构建一个更加健壮、用户友好的WordPress网站。

以上就是WordPress管理栏与用户权限深度定制指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1287567.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
定制WordPress后台:为特定用户角色精细化管理管理栏和访问权限
上一篇 2025年12月11日 04:31:11
mPDF PDF 文档保护:深入理解 SetProtection 函数的使用与常见误区
下一篇 2025年12月11日 04:31:24

相关推荐

  • JavaFX:控制形状的层叠顺序以实现视觉效果

    JavaFX:控制形状的层叠顺序以实现视觉效果JavaFX:控制形状的层叠顺序以实现视觉效果JavaFX:控制形状的层叠顺序以实现视觉效果JavaFX:控制形状的层叠顺序以实现视觉效果

    在JavaFX应用中,控制形状的层叠顺序对于实现复杂的视觉效果至关重要。当使用toFront()方法无法达到预期效果时,可以考虑使用setViewOrder()方法。setViewOrder()允许开发者显式地设置节点的绘制顺序,数值越小,节点越靠前(即越在上层显示)。 使用setViewOrder…

    2026年9月29日 • 用户投稿
    000
  • UC浏览器怎么设置在新标签页打开链接_UC浏览器链接打开方式调整

    UC浏览器怎么设置在新标签页打开链接_UC浏览器链接打开方式调整UC浏览器怎么设置在新标签页打开链接_UC浏览器链接打开方式调整UC浏览器怎么设置在新标签页打开链接_UC浏览器链接打开方式调整UC浏览器怎么设置在新标签页打开链接_UC浏览器链接打开方式调整

    可通过长按链接选择“在新标签页中打开”实现临时新页浏览;2. 进入设置修改默认链接打开方式为始终在新标签页;3. 启用手势操作如侧边滑动快速打开新标签;4. 创建桌面快捷方式并设置在新标签页打开,四种方法均适用于UC浏览器。 如果您在浏览网页时希望链接能够在新标签页中打开,以方便多任务处理或避免丢失…

    2026年9月29日 • 用户投稿
    100
  • Sublime实现用户行为日志追踪系统_搭配前端埋点与后端收集方案

    Sublime实现用户行为日志追踪系统_搭配前端埋点与后端收集方案Sublime实现用户行为日志追踪系统_搭配前端埋点与后端收集方案Sublime实现用户行为日志追踪系统_搭配前端埋点与后端收集方案Sublime实现用户行为日志追踪系统_搭配前端埋点与后端收集方案

    sublime text 能通过多种方式提高用户行为分析中埋点代码的编写效率。1. 使用 snippets 快速插入埋点模板,如 trackevent 函数结构;2. 利用 emmet 缩写生成 html 事件绑定基础代码;3. 搭配 eslint 等插件确保代码符合规范;4. 编辑 json 或 …

    2026年9月29日 • 用户投稿
    100
  • 怎么用豆包AI帮我优化Webpack配置 用AI加速前端构建的完整指南

    使用豆包ai优化webpack配置可显著提升构建效率和输出质量,具体方法包括:1. 让豆包ai分析现有配置问题,识别缓存、代码拆分、压缩等方面的优化空间;2. 生成针对特定项目(如react)的最佳实践配置模板,涵盖代码分割、压缩插件、环境变量设置等;3. 针对具体问题(如提取css)获取完整解决方…

    2026年9月29日
    100
  • 抖音店铺怎么介绍?抖音店铺介绍

    抖音店铺怎么介绍?抖音店铺介绍抖音店铺怎么介绍?抖音店铺介绍抖音店铺怎么介绍?抖音店铺介绍抖音店铺怎么介绍?抖音店铺介绍

    抖音作为一款短视频社交平台,吸引了大量用户。许多商家纷纷入驻抖音开设店铺,希望通过短视频营销吸引更多消费者。而店铺评价作为消费者了解店铺的重要途径,对店铺口碑和销售业绩有着至关重要的影响。本文将为您解析如何利用关键词打造优质评价,提升店铺口碑。 一、关键词的重要性 1. 提高搜索排名 在抖音搜索店铺…

    2026年9月29日 • 用户投稿
    000
  • 抖音视频无法分享如何解决

    抖音视频无法分享如何解决抖音视频无法分享如何解决抖音视频无法分享如何解决抖音视频无法分享如何解决

    先检查网络连接,确认Wi-Fi或移动数据正常,切换网络并关闭飞行模式;再进入手机设置确保抖音的存储、网络、剪贴板权限已开启;接着更新或重启抖音App,清除缓存;然后尝试更换分享渠道,排除微信等接收方问题;若仍无法解决,联系抖音客服。 抖音视频无法分享,通常和网络、权限设置或App本身问题有关。别急,…

    2026年9月29日 • 用户投稿
    300
  • ​Meta 成立超级政治行动委员会,抗击 AI 监管政策

    ​Meta 成立超级政治行动委员会,抗击 AI 监管政策​Meta 成立超级政治行动委员会,抗击 AI 监管政策​Meta 成立超级政治行动委员会,抗击 AI 监管政策​Meta 成立超级政治行动委员会,抗击 AI 监管政策

    据 Axios 报道,Meta 公司正显著增加在政策游说方面的资源投入,宣布成立一个名为“美国技术卓越计划”(American Technology Excellence Project)的超级政治行动委员会(super PAC),并计划投入数千万美元,以应对各州可能推进的人工智能监管措施。该委员会…

    2026年9月29日 • 用户投稿
    200
  • iCloud官网怎么注册_iCloud官网新账号注册教程

    iCloud官网怎么注册_iCloud官网新账号注册教程iCloud官网怎么注册_iCloud官网新账号注册教程iCloud官网怎么注册_iCloud官网新账号注册教程iCloud官网怎么注册_iCloud官网新账号注册教程

    需通过Apple ID系统注册而非iCloud官网,访问appleid.apple.com或在设备上创建账号,填写信息、验证邮箱手机号后即可登录iCloud。 如果您尝试在iCloud官网创建一个全新的Apple账户,但找不到直接的注册入口,这是因为iCloud本身不提供独立的注册页面。您需要通过苹…

    2026年9月29日 • 用户投稿
    000
  • MAC的触控板无法点击怎么办_Mac触控板物理点按失灵修复方法

    MAC的触控板无法点击怎么办_Mac触控板物理点按失灵修复方法MAC的触控板无法点击怎么办_Mac触控板物理点按失灵修复方法MAC的触控板无法点击怎么办_Mac触控板物理点按失灵修复方法MAC的触控板无法点击怎么办_Mac触控板物理点按失灵修复方法

    触控板无法点击可能由设置、硬件或电池问题引起,需逐步排查。首先检查系统设置中“轻点来点按”是否开启并调节点按力度;随后重置SMC和NVRAM以恢复硬件正常管理;接着检查电池是否鼓包导致物理挤压;再确认触控板固定螺丝是否松动需调整;最后运行Apple Diagnostics诊断是否存在硬件故障代码如T…

    2026年9月29日 • 用户投稿
    000
  • 一个枕套,暴露亚朵的管理“死角”

    一个枕套,暴露亚朵的管理“死角”一个枕套,暴露亚朵的管理“死角”一个枕套,暴露亚朵的管理“死角”一个枕套,暴露亚朵的管理“死角”

    酒店惊现医院枕套!6月4日,相关话题冲上热搜,此事也将中高端连锁酒店亚朵推上了风口浪尖。 据网友发布的帖子,他在入住杭州城西银泰附近的亚朵后,发现酒店枕套上印着“杭州御湘湖未来医院”的名字。尽管该网友表示,后续酒店不仅送了伴手礼和房费优惠,还承诺会让布草公司提供检测报告,态度良好。但一家定位中高端的…

    2026年9月29日 • 用户投稿
    000
  • Sublime代码缩进设置 Sublime规范代码格式方法

    Sublime代码缩进设置 Sublime规范代码格式方法Sublime代码缩进设置 Sublime规范代码格式方法Sublime代码缩进设置 Sublime规范代码格式方法Sublime代码缩进设置 Sublime规范代码格式方法

    1.全局设置缩进规则,通过preferences->settings调整tab_size、translate_tabs_to_spaces和detect_indentation参数;2.针对不同语言配置语法专属设置;3.使用view->indentation菜单快速调整缩进;4.结合pr…

    2026年9月29日 • 用户投稿
    000
  • 如何在iPhone上完成DeepSeek安装

    如何在iPhone上完成DeepSeek安装如何在iPhone上完成DeepSeek安装如何在iPhone上完成DeepSeek安装如何在iPhone上完成DeepSeek安装

    在iphone上直接安装deepseek目前不可行,因其模型面向服务器环境设计。1. 通过api访问:注册开发者账号并获取api key,使用pythonista等工具调用api,优点是无需担心性能限制,缺点是需编程基础和网络连接;2. 使用web app或pwa:若deepseek提供网页版服务,…

    2026年9月29日 • 用户投稿
    000
  • war文件怎么打开?

    war文件怎么打开?war文件怎么打开?war文件怎么打开?war文件怎么打开?

    .war 文件如何打开?.war 格式的文件本质上是一种压缩包文件,通常情况下,我们不能直接通过双击的方式来打开或运行它。这可能是因为其设计初衷是为了便于传输和部署,同时保证文件的安全性。不过,我们完全可以借助一些专业的工具来对 .war 文件进行解压操作,从而查看其中的内容。 接下来教大家如何打开…

    2026年9月29日 • 用户投稿
    100
  • Java多线程任务调度:共享任务列表的高效处理策略

    Java多线程任务调度:共享任务列表的高效处理策略Java多线程任务调度:共享任务列表的高效处理策略Java多线程任务调度:共享任务列表的高效处理策略Java多线程任务调度:共享任务列表的高效处理策略

    本文深入探讨了在Java多线程环境中,如何高效且安全地处理共享任务列表的问题。核心策略是利用ExecutorService框架,它能够自动管理线程池并调度任务到可用线程,从而避免复杂的手动同步机制。文章还将简要介绍BlockingQueue作为底层机制或手动实现任务分发时的替代方案,并提供实际代码示…

    2026年9月29日 • 用户投稿
    100
  • 悟空浏览器如何设置夜间模式_悟空浏览器夜间护眼模式开启方法

    悟空浏览器如何设置夜间模式_悟空浏览器夜间护眼模式开启方法悟空浏览器如何设置夜间模式_悟空浏览器夜间护眼模式开启方法悟空浏览器如何设置夜间模式_悟空浏览器夜间护眼模式开启方法悟空浏览器如何设置夜间模式_悟空浏览器夜间护眼模式开启方法

    1、可通过悟空浏览器设置菜单开启夜间模式,进入“设置-显示模式”选择“夜间模式”切换深色主题;2、也可在浏览网页时点击“Aa”图标,快速启用“夜间阅读”模式;3、还可开启系统深色模式并设置浏览器“跟随系统设置”,实现自动切换,减少蓝光,保护视力。 如果您在夜间使用悟空浏览器时感到屏幕光线过强,影响视…

    2026年9月29日 • 用户投稿
    000
  • 怎么用豆包AI生成GraphQL API代码 GraphQL API代码的AI生成方案

    怎么用豆包AI生成GraphQL API代码 GraphQL API代码的AI生成方案怎么用豆包AI生成GraphQL API代码 GraphQL API代码的AI生成方案怎么用豆包AI生成GraphQL API代码 GraphQL API代码的AI生成方案怎么用豆包AI生成GraphQL API代码 GraphQL API代码的AI生成方案

    使用豆包ai生成graphql api代码的关键在于明确需求并合理引导ai输出。1. 明确数据模型与业务逻辑,如定义user和post类型及其关系;2. 通过结构化提示词生成基础代码,包括typedefs、resolvers和服务启动代码;3. 根据实际项目需要调整验证逻辑、优化数据加载、连接真实数…

    2026年9月29日 • 用户投稿
    100
  • Java多线程任务调度:利用ExecutorService高效处理共享列表任务

    Java多线程任务调度:利用ExecutorService高效处理共享列表任务Java多线程任务调度:利用ExecutorService高效处理共享列表任务Java多线程任务调度:利用ExecutorService高效处理共享列表任务Java多线程任务调度:利用ExecutorService高效处理共享列表任务

    本文深入探讨在Java多线程环境中,如何高效且安全地从共享任务列表中分配并执行任务。针对手动管理任务分发的复杂性,文章重点推荐并详细阐述了ExecutorService作为核心解决方案,它通过内部机制自动化任务调度,确保线程资源得到充分利用。文中提供了详细的Java代码示例,并讨论了Blocking…

    2026年9月29日 • 用户投稿
    000
  • 抖音网页版如何登录_抖音网页版账号登录详细教程

    抖音网页版如何登录_抖音网页版账号登录详细教程抖音网页版如何登录_抖音网页版账号登录详细教程抖音网页版如何登录_抖音网页版账号登录详细教程抖音网页版如何登录_抖音网页版账号登录详细教程

    登录抖音网页版可通过扫码、验证码或密码方式,推荐使用扫码登录更安全便捷。 打开电脑浏览器,访问抖音官网 www.douyin.com,就能进入抖音网页版。登录方式有多种,操作简单,下面详细介绍具体步骤。 扫码登录(推荐方式) 这是最常用也最安全的登录方法,无需输入密码。 • 打开电脑上的浏览器,进入…

    2026年9月29日 • 用户投稿
    000
  • Effidit的”个性化词库”怎么设置?如何添加行业术语或专有名词?

    Effidit的”个性化词库”怎么设置?如何添加行业术语或专有名词?Effidit的”个性化词库”怎么设置?如何添加行业术语或专有名词?Effidit的”个性化词库”怎么设置?如何添加行业术语或专有名词?Effidit的”个性化词库”怎么设置?如何添加行业术语或专有名词?

    设置effidit个性化词库的关键在于找到词库管理入口并添加专属词汇。1.进入设置或个人资料页面,选择添加新词或导入词库;2.手动输入术语或导入已有文本文件,并为词条添加标签或解释;3.词库生效后,effidit将优先使用这些词汇提供写作建议,提升专业性和效率;4.持续优化词库内容和标签结构,以适应…

    2026年9月29日 • 用户投稿
    100
  • 电脑怎么禁用自动装载外接移动设备

    电脑怎么禁用自动装载外接移动设备电脑怎么禁用自动装载外接移动设备电脑怎么禁用自动装载外接移动设备电脑怎么禁用自动装载外接移动设备

    相信大家在日常办公中都会使用u盘、移动硬盘等外接存储设备来传输和保存文件。但有时会遇到设备无法识别,或插入后导致系统运行缓慢的问题。这时,我们可以尝试关闭系统的自动装载功能,待问题修复后再重新启用。如果你还不了解具体操作,不妨跟着下面的步骤一起来学习。 操作步骤: 右键点击“开始”菜单图标,选择“W…

    2026年9月29日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信