Skip to content

文章地址自定义接口 ​

在 Z-BlogPHP 中,文章对象的 Url 是一个虚拟属性,每次读取 $post->Url(包括模板中的 {$article.Url})时都会触发 Filter_Plugin_Post_Url 接口,可以借此接管文章地址的生成逻辑,实现自定义链接、站外跳转地址等场景。

接口信息 ​

接口参数说明
Filter_Plugin_Post_Url&$this干预 Post 类 Url 方法的接口

完整案例 ​

下例只为设置了 demo_custom_url 元数据(Metas)的文章返回自定义地址,其余文章仍走系统默认的路由规则生成地址:

php
<?php

RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");

function ActivePlugin_demoAPP()
{
    Add_Filter_Plugin('Filter_Plugin_Post_Url', 'demoAPP_Post_Url');
}

function demoAPP_Post_Url(&$post)
{
    global $zbp;

    $custom = isset($post->Metas->demo_custom_url) ? $post->Metas->demo_custom_url : '';
    if ($custom != '') {
        // 动态设置 RETURN 信号,本次读取 Url 时使用本回调的返回值
        SetPluginSignal('Filter_Plugin_Post_Url', __FUNCTION__, PLUGIN_EXITSIGNAL_RETURN);
        return $zbp->host . 'goto/?url=' . rawurlencode($custom);
    }
}

注意事项 ​

  • 仅在读取 Url 属性时触发;Url 是只读虚拟属性,直接给 $post->Url 赋值不会触发本接口(赋值会被系统忽略)。
  • 注册时第三个参数传 PLUGIN_EXITSIGNAL_RETURN 表示无条件使用回调返回值,所有文章的 Url 都会被接管;本例使用 SetPluginSignal 按需生效,未设置自定义地址的文章继续由系统按路由规则生成地址。
  • 回调中不要再次读取当前文章的 Url 属性(例如拼接列表),否则会再次触发本接口造成死循环。
  • 返回的自定义地址需要配合伪静态规则或自行保证可访问,否则前台点击会得到 404。