分类父子关系怎么取,URL 到底怎么生成
Z-Blog 的分类对象看着字段挺全,但一半是魔术属性,每次访问现算。分清哪些是存的、哪些是算的,才不会写出「改了没生效」的代码。这篇把 Level、Root、Parent、AllCount 逐条核了一遍,顺带说清分页地址为什么不能手拼。
以下是带有「踩坑记录」标签的全部文章
Z-Blog 的分类对象看着字段挺全,但一半是魔术属性,每次访问现算。分清哪些是存的、哪些是算的,才不会写出「改了没生效」的代码。这篇把 Level、Root、Parent、AllCount 逐条核了一遍,顺带说清分页地址为什么不能手拼。
SEO 争排名,GEO 争被引用——两条链路不同:生成式引擎先检索再重组答案,排名第五但有一段能独立回答问题的段落会被引用,排名第一却通篇铺垫的会被跳过。文章讲 AI 实际抽取什么、写法上改哪几处、JSON-LD 为何从加分项变必需,以及哪些 SEO 老规矩仍然有效。
主循环操作的是全局 $wp_query 和 $post,子查询里的 the_post() 会把 $post 换掉,走完不还原就污染后面所有输出。本文对照三种写法、query_posts 为什么不该用、pre_get_posts 的两个必备判断,以及两个 reset 函数的区别。
WordPress 决定加载哪个文件是固定顺序:解析 URL → 条件标签判断页面类型 → 生成一串候选文件名 → 取第一个真实存在的。本文列出文章、页面、分类、标签、搜索、404 六类页面的完整候选链,指出三处最容易搞错的顺序(front-page.php 会让 home.ph…
给插件加后台配置页,不用自己建表:Z-Blog 自带 $zbp->Config('插件ID') 一个插件一个命名空间,读两行写两行,但 SaveConfig 一次都不能漏,Config 从未创建时读出来是 null 而非空串,必须带默认值兜底。文中给出 main.php 最小骨架…
上一篇结尾我说要把那三处代码收成插件。真动手时,第一版我是直接粘进主题的 include.php 里的。第二天换样式试效果,主题文件一覆盖,目录、相关文章、面包屑全没了。代码还在,只是不在插件里,主题一动它就跟着走。 所以这篇不讲新钩子。把
钩子拿到的参数是引用还是副本,决定了改了算不算数。本文按 Article_Content、ViewList_Core、Post_Get 三个钩子列出各自能拿到什么,配三段可直接用的实战代码:文章页按分类取相关文章、正文自动生成目录、列表页取分类父子路径。最后记三个坑:漏写 & 改…
前台四类页面的钩子位置汇总:Index、List、Article、Search 前缀相同语义一致——Begin 插顶部、End 插底部、Core 改数据层、Content 改正文本身。附三个实测坑:Begin 触发时 head 已输出、漏写 & 引用改了无效、Article_Co…
Z-Blog 钩子本质是注册回调的数组,没有优先级参数,要调顺序只能动插件加载顺序。本文按 plugin.xml → RegisterPlugin → Add_Filter_Plugin → 触发执行四步拆开链路,并按场景列出常挂的钩子,附页头注入与后台加菜单两段可直接抄的代码,…