Skip to content
Go back

WordPress 表结构描述与 OneNav 一为导航新建网址实际生成的表数据

| 0 Views Edit page

前言

之后 steam.cash 导航站的网址一定是通过脚本自动抓取和添加的,因此必须要分析 WordPress 的表结构和 OneNav 操作对表的实际影响。
需要注意的是,本文仅仅做了对 OneNav 导航添加 分类网址 相关的分析。自定义网址、评论和主题相关的操作均不涉及,我也推荐将这些极度个性化的操作只在页面端实施
OneNav 一为导航主题版本为 V4.1810


WordPress 与 OneNav 的表结构描述

一、WordPress

官方文档:zh-cn:数据库描述

WordPress 自身拥有 11 张表,它们支撑起了 WordPress 最基础的功能,包括文章编辑、发布、评论和用户操作等。 WordPress 表建模

稍作解释:

  1. wp_comments:保存对文章的评论的信息。
    ❌ 导航添加 分类网址 不涉及。

    管理 > 评论 > 评论

  2. wp_commentmeta:保存评论的元数据(特征信息)。
    ❌ 导航添加 分类网址 不涉及。

    管理 > 评论 > 评论

  3. wp_links:保存于网址相关的信息。
    看起来似乎和导航主题的 网址 概念匹配,但实际没有关系

    管理 > 网址 > 添加
    管理 > 网址 > 编辑

  4. wp_options:保存设置的各项及其值。
    ❌ 导航添加 分类网址 不涉及。

    管理 > 设置 > 常规
    管理 > 设置 > 撰写
    管理 > 设置 > 阅读
    管理 > 设置 > 讨论
    管理 > 设置 > 隐私
    管理 > 设置 > 固定网址
    管理 > 设置 > 杂项
    管理 > 外观 > 小工具

  5. wp_postmeta:保存发布用的对象的元数据(特征信息),包含描述、网址、查看数和收藏数等。
    ✅ 导航中的一个 网址 实际上是 WordPress 中的一篇文章,因此导航添加 分类网址 涉及该表。

    管理 > 文章 > 添加
    管理 > 页面 > 添加

  6. wp_posts:保存各种发布用的对象的数据,包含标题、内容和状态等。而展示目录的时候,也会使用到该表。
    ✅ 导航添加 分类网址 涉及该表。

    管理 > 文章 > 添加
    管理 > 文章 > 编辑
    管理 > 页面 > 添加
    管理 > 页面 > 编辑
    管理 > 媒体 > 添加
    管理 > 媒体 > 媒体库

  7. wp_terms:保存文章的分类和 Tags。
    ✅ 导航添加 分类网址 涉及该表。

    管理 > 文章 > Tags
    管理 > 文章 > 分类
    管理 > 网址 > 网址分类
    管理 > 文章 > 添加
    管理 > 文章 > 编辑
    管理 > 文章 > 添加
    管理 > 文章 > 编辑

  8. wp_term_relationships:保存与与文章有关的分类。
    ✅ 导航添加 分类网址 涉及该表。

    涉及操作与 wp_terms 表相同

  9. wp_term_taxonomy:保存分类和 Tags 的属性,比如描述和父子结构等。
    ✅ 导航添加 分类网址 涉及该表。

    涉及操作与 wp_terms 表相同

  10. wp_usermeta:保存每个用户的元数据(特征信息)。
    ❌ 导航添加 分类网址 不涉及。

    管理 > 用户

  11. wp_users:用户列表。
    ❌ 导航添加 分类网址 不涉及。

    管理 > 用户

综上,我们只需要关注 wp_postswp_postmetawp_termswp_term_relationshipswp_term_taxonomy 即可

二、OneNav

表结构原文件等可以到我整理的仓库获取:senjianlu/steamcash

OneNav 新增了 6 张表,来支撑导航需要的功能。
OneNav 的表

  1. wp_io_custom_term:与 OneNav 主题中商城有关的表。
    ❌ 导航添加 分类网址 不涉及。

    管理 > 商城数据

  2. wp_io_custom_url:与 OneNav 主题中商城有关的表。
    ❌ 导航添加 分类网址 不涉及。

    管理 > 商城数据

  3. wp_io_pay_order:与 OneNav 主题中商城有关的表。
    ❌ 导航添加 分类网址 不涉及。

    管理 > 商城数据

  4. wp_io_custom_messages:可能是与 OneNav 主题中商城有关的表。虽然可能也和其他内部消息推送功能相关,不过我在长久使用后它内部依然没有新增数据。
    ❌ 导航添加 分类网址 不涉及。

    管理 > 商城数据

  5. wp_io_views:存储 网址 的点击、访问次数等。
    ✅ 导航添加 分类网址 涉及该表。

    管理 > 网址

  6. wp_termmeta:存储 分类 的元数据(特征信息),包含 SEO 信息和其下 网址 的展示方式等。
    ✅ 导航添加 分类网址 涉及该表。

    管理 > 网址 > 网址分类

综上,我们只需要关注 wp_io_viewswp_termmeta 即可


OneNav 一为导航新建网址实际生成的表数据

OneNav 导航站的大致数据结构:

站点
- 目录 1(父)
  - 目录 a(子)
    - 网址百度
    - 网址 Google
  - 目录 b(子)
- 目录 2(父)
...
...

一、新建目录(父)

相关表:wp_termswp_termmetawp_term_taxonomywp_term_relationships
只方便理解,暂时不会将该功能写入脚本

1、新建测试用的目录(父)

测试用的目录(父) 目录(父)添加成功

2、带来的新的数据

  • wp_terms

    term_idnameslugterm_group
    7表数据判断用目录(父)table_data_check_for_path_parent0

    最重要就是 term_id,它是这个目录的唯一标识符。

  • wp_termmeta

    meta_idterm_idmeta_keymeta_value
    227_term_order99
    237seo_titleSEO 自定义标题
    247seo_metakeySEO 自定义关键词一、关键词2
    257seo_desc自定义描述。 另起一行。
    267card_modedefault
    277columns_typecustom
    287columnsa:5:{s:2:“sm”;s:1:“3”;s:2:“md”;s:1:“4”;s:2:“lg”;s:1:“5”;s:2:“xl”;s:1:“6”;s:3:“xxl”;s:1:“7”;}

    meta_id 应该是自增 ID。

  • wp_term_taxonomy

    term_taxonomy_idterm_idtaxonomydescriptionparentcount
    77favorites表数据判断用目录(父)的描述。另起一行。Home of Emoji Meanings ? ????00

    term_taxonomy_id 官方标记了它为自增 IDterm_taxonomy_id bigint(20) unsigned NOT NULL auto_increment,,它的值与 term_id 并不总是相同,需要区分对待:term_taxonomy_id vs term_id
    description 在表数据中虽然显示有问题(可能是我 MySQL GUI 的问题),但是实际在 WordPress 中表示是好的,后续在脚本编写的时候也会克服这个问题。

  • wp_term_relationships

    object_idterm_taxonomy_idterm_order

    虽然单纯创建目录(父)不会新增数据,但这里还是提一下 object_id 将是作为 网址 的 WordPress 文章的 post_id,而 term_taxonomy_id 则是上面 wp_term_taxonomy 表的主键。

3、配置项与表字段的映射关系

WordPress 页面配置项对应表字段备注例子
名称wp_terms.name
别名wp_terms.slug
父级分类目录wp_term_taxonomy.parent没有父目录的时候为 0
描述wp_term_taxonomy.description
排序wp_termmeta 表中 meta_key_term_order 的行
自定义标题wp_termmeta 表中 meta_keyseo_title 的行SEO设置(可留空)
设置关键词wp_termmeta 表中 meta_keyseo_metakey 的行SEO设置(可留空)
自定义描述wp_termmeta 表中 meta_keyseo_desc 的行SEO设置(可留空)
网址卡片样式wp_termmeta 表中 meta_keycard_mode 的行自定义选项
网址列数wp_termmeta 表中 meta_keycolumns_type 的行、wp_termmeta 表中 meta_keycolumns 的行自定义选项

其他字段:

  • wp_terms.term_id:创建目录的时候自动生成。
  • wp_terms.term_group:目录(父)没有再上级的目录,因此为 0
  • wp_term_taxonomy.taxonomy:总为固定值 favorites
  • wp_term_taxonomy.count:目录中的网址个数。

二、展示目录(父)

相关表:wp_postswp_postmetawp_term_relationships
只方便理解,暂时不会将该功能写入脚本

1、展示测试用的目录(父)

添加至菜单,之后保存:
展示目录(父)
保存目录(父)
展示目录(父)成功

2、带来的新的数据

  • wp_posts

    IDpost_authorpost_datepost_date_gmtpost_contentpost_titlepost_excerptpost_statuscomment_statusping_statuspost_passwordpost_nameto_pingpingedpost_modifiedpost_modified_gmtpost_content_filteredpost_parentguidmenu_orderpost_typepost_mime_typecomment_count
    2712024-10-12 14:21:542024-10-12 06:21:54表数据判断用目录(父)的描述。 另起一行。 Home of Emoji Meanings ? ????publishclosedclosed272024-10-12 14:21:542024-10-12 06:21:540https://steam.cash/?p=274nav_menu_item0

    虽然乍一看都能明白数据来源,但是基本都是从其他表中检索而来,同时还伴有 menu_order 这种需要检索对应数据进行重新排序生成的值因此可以预见的是展示目录功能使用 Python3 来实现会比较复杂,顺位最后

  • wp_postmeta

    meta_idpost_idmeta_keymeta_value
    19227_menu_item_typetaxonomy
    19327_menu_item_menu_item_parent0
    19427_menu_item_object_id7
    19527_menu_item_objectfavorites
    19627_menu_item_target
    19727_menu_item_classesa:1:{i:0;s:0:"""";}
    19827_menu_item_xfn
    19927_menu_item_url
    20427menu_icoiconfont icon-category
    20527open
    20627purview0
  • wp_term_relationships

    object_idterm_taxonomy_idterm_order
    2740

    这里的 object_id 是上一张 wp_posts 表的 ID,而 term_taxonomy_id 则大概率为 4
    原因是与表中的这条数据有关:

    term_taxonomy_idterm_idtaxonomydescriptionparentcount
    44nav_menu00

    OneNav 用其管理所有需要展示的分类,而一般你需要新建一个目录(它的 term_taxonomy_id 将自增为 3),再进行展示操作,OneNav 自动新建数据,自增为 4


三、新建目录(子)

相关表:wp_termswp_termmetawp_term_taxonomywp_term_relationships
数据与目录(父)基本一致。
只方便理解,暂时不会将该功能写入脚本

1、新建测试用的目录(子)

测试用的目录(子)
目录(子)添加成功

2、带来的新的数据

  • wp_terms

    term_idnameslugterm_group
    8表数据判断用目录(子)table_data_check_for_path_child0
  • wp_termmeta

    meta_idterm_idmeta_keymeta_value
    298_term_order50
    308seo_title子的自定义标题
    318seo_metakey子的自定义关键词一、关键词2
    328seo_desc子的自定义描述。 另起一行。
    338card_modemin
    348columns_typecustom
    358columnsa:5:{s:2:“sm”;s:2:“10”;s:2:“md”;s:1:“9”;s:2:“lg”;s:1:“8”;s:2:“xl”;s:1:“7”;s:3:“xxl”;s:1:“6”;}
  • wp_term_taxonomy

    term_taxonomy_idterm_idtaxonomydescriptionparentcount
    88favorites表数据判断用目录(子)的描述。 另起一行。 Home of Emoji Meanings ? ????70

    这里指定了父目录,因此 parent7

  • wp_term_relationships

    object_idterm_taxonomy_idterm_order

四、展示目录(子)

相关表:wp_postswp_postmetawp_term_relationships
只方便理解,暂时不会将该功能写入脚本

1、展示测试用的目录(子)

展示目录(子)
保存目录(子)
展示目录(子)成功

2、带来的新的数据

  • wp_posts

    IDpost_authorpost_datepost_date_gmtpost_contentpost_titlepost_excerptpost_statuscomment_statusping_statuspost_passwordpost_nameto_pingpingedpost_modifiedpost_modified_gmtpost_content_filteredpost_parentguidmenu_orderpost_typepost_mime_typecomment_count
    2812024-10-12 14:52:492024-10-12 06:52:49表数据判断用目录(子)的描述。 另起一行。 Home of Emoji Meanings ? ????publishclosedclosed282024-10-12 14:52:492024-10-12 06:52:497https://steam.cash/?p=285nav_menu_item0

    这里指定了父目录,因此 post_parent7

  • wp_postmeta

    meta_idpost_idmeta_keymeta_value
    20728_menu_item_typetaxonomy
    20828_menu_item_menu_item_parent27
    20928_menu_item_object_id8
    21028_menu_item_objectfavorites
    21128_menu_item_target
    21228_menu_item_classesa:1:{i:0;s:0:"""";}
    21328_menu_item_xfn
    21428_menu_item_url
    21628menu_icoiconfont icon-category
    21728open
    21828purview0
  • wp_term_relationships

    object_idterm_taxonomy_idterm_order
    2840

五、新建网址

相关表:wp_postswp_postmeta

1、新建测试用的网址(在子目录中)

测试用的网址
网址添加成功

2、带来的新的数据

  • wp_posts

    IDpost_authorpost_datepost_date_gmtpost_contentpost_titlepost_excerptpost_statuscomment_statusping_statuspost_passwordpost_nameto_pingpingedpost_modifiedpost_modified_gmtpost_content_filteredpost_parentguidmenu_orderpost_typepost_mime_typecomment_count
    2912024-10-12 15:04:430000-00-00 00:00:00自动草稿auto-draftopenclosed2024-10-12 15:04:430000-00-00 00:00:000https://steam.cash/sites/29.html0sites0
    3012024-10-12 15:11:542024-10-12 07:11:54正文信息。另起一行。<a href=""https://steam.cash/sample-page"">示例页面测试用的新网址(子目录中)publishopenclosed%e6%b5%8b%e8%af%95%e7%94%a8%e7%9a%84%e6%96%b0%e7%bd%91%e5%9d%80%ef%bc%88%e5%ad%90%e7%9b%ae%e5%bd%95%e4%b8%ad%ef%bc%892024-10-12 15:11:542024-10-12 07:11:540https://steam.cash/sites/30.html0sites0
  • wp_postmeta

    meta_idpost_idmeta_keymeta_value
    22430views0
    22530_down_count0
    22630_like_count0
    22730_star_count0
    22830_user_purview_levelall
    22930_edit_last1
    23030_edit_lock1728717031:1
    23130_seo_title
    23230_seo_metakey
    23330_seo_desc
    23430sidebar_layoutdefault
    23530_sites_typesites
    23630_goto0
    23730_wechat_id
    23830_is_min_app
    23930_sites_linkhttps://google.com
    24030_spare_sites_linka:1:{i:0;a:3:{s:10:""spare_name"";s:4:""Bing"";s:9:""spare_url"";s:16:""https://bing.com"";s:10:""spare_note"";s:30:""这是 Bing 的跳转链接。"";}}
    24130_sites_sescribe这是 Google 的跳转链接。另起一行。
    24230_sites_languagezh,en
    24330_sites_country中国
    24430_sites_order0
    24530_thumbnailhttps://image.senjianlu.com/blog/icon.png
    24630_sites_previewhttps://image.senjianlu.com/blog/2024-10-10/onenav.png
    24730_wechat_qr
    24830_down_version
    24930_down_size
    25030_down_url_list
    25130_dec_password
    25230_app_platform
    25330_down_preview
    25430_down_formal
    25530_screenshot
    25630buy_optiona:7:{s:8:""buy_type"";s:4:""view"";s:5:""limit"";s:3:""all"";s:8:""pay_type"";s:5:""money"";s:10:""price_type"";s:6:""single"";s:9:""pay_title"";s:0:"""";s:9:""pay_price"";s:1:""0"";s:5:""price"";s:1:""0"";}
  • wp_term_taxonomy

    term_taxonomy_idterm_idtaxonomydescriptionparentcount
    88favorites表数据判断用目录(子)的描述。 另起一行。 Home of Emoji Meanings ? ????71

    更新了子目录的 count,将其加一从 0 变成了 1。父目录的不会跟着变化。

  • wp_term_relationships

    object_idterm_taxonomy_idterm_order
    3080

    term_taxonomy_id 是子目录的 term_taxonomy_id8

3、配置项与表字段的映射关系

WordPress 页面配置项对应表字段备注例子
网址分类wp_term_relationships 表中 object_id 为对应 post_id 的行
标题wp_posts.post_title
正文wp_posts.post_content
链接wp_postmeta 表中 meta_key_sites_link 的行
备用链接地址(其他站点)wp_postmeta 表中 meta_key_spare_sites_link 的行
一句话描述(简介)wp_postmeta 表中 meta_key_sites_sescribe 的行
站点语言wp_postmeta 表中 meta_key_sites_language 的行
站点所在国家或地区wp_postmeta 表中 meta_key_sites_country 的行
排序wp_postmeta 表中 meta_key_sites_order 的行拖动排序的情况下无法更改,一直为 0
LOGO,标志wp_postmeta 表中 meta_key_thumbnail 的行
网站预览截图wp_postmeta 表中 meta_key_sites_preview 的行
公众号二维码wp_postmeta 表中 meta_key_wechat_qr 的行

其他字段:

  • wp_posts.id:自增。
  • wp_posts.post_name:Url 编码后的标题。
  • wp_posts.uid"https://steam.cash/sites/{}.html".format(id) 形式的值。
  • wp_postmeta 表中 meta_key_edit_lock 的行:前面的值是秒级的时间戳,"{}:1".format(str(int(time.time()))) 形式的值。

Edit page