You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多站点环境下如何从永久链接获取Blog ID(Site ID)?

解决WordPress多站点从永久链接提取Blog ID的问题

针对你用「WDS Multisite Aggregate」聚合文章后,需要从子站点文章的永久链接中提取对应Blog ID的需求,这里提供两种适配不同多站点结构的原生方案,完全不需要依赖额外插件:

核心思路

WordPress多站点的URL结构主要分为子目录型(如https://主域名.com/子站点别名/文章路径)和子域名型(如https://子站点别名.主域名.com/文章路径),我们可以通过解析URL的关键部分,结合WordPress原生函数获取对应的Blog ID。

方案实现

1. 通用解析函数(适配两种结构)

下面的函数会自动识别当前多站点的结构,从传入的文章永久链接中提取并返回对应的Blog ID:

function get_blog_id_from_permalink( $permalink ) {
    // 解析URL,获取主机名和路径信息
    $url_parts = parse_url( $permalink );
    if ( empty( $url_parts['host'] ) || empty( $url_parts['path'] ) ) {
        return false; // 无效URL直接返回false
    }

    $main_network_domain = get_network()->domain;
    $blog_id = false;

    // 处理子域名型多站点
    if ( strpos( $url_parts['host'], $main_network_domain ) !== false && $url_parts['host'] !== $main_network_domain ) {
        // 提取子域名部分(比如从site2.example.com得到site2)
        $subdomain = str_replace( '.' . $main_network_domain, '', $url_parts['host'] );
        $blog_id = get_id_from_blogname( $subdomain );
    }
    // 处理子目录型多站点
    else {
        // 分割路径,获取第一个子目录(比如从/site2/2024/05/10/test-post/得到site2)
        $path_segments = explode( '/', trim( $url_parts['path'], '/' ) );
        if ( ! empty( $path_segments[0] ) ) {
            $blog_slug = $path_segments[0];
            $blog_id = get_id_from_blogname( $blog_slug );
        }
    }

    // 验证Blog ID是否有效
    if ( $blog_id && get_blog_details( $blog_id ) ) {
        return $blog_id;
    }

    return false;
}

2. 调用示例

你可以这样在代码中使用这个函数,获取子站点的首页地址:

// 假设$post_permalink是聚合文章的永久链接(指向子站点文章)
$post_permalink = get_permalink( $aggregated_post_id ); // 替换为你的聚合文章链接获取方式
$myblogid = get_blog_id_from_permalink( $post_permalink );

if ( $myblogid ) {
    $mysuburl = get_home_url( $myblogid );
    // 这里可以使用$mysuburl做后续操作,比如输出子站点链接
    echo '<a href="' . esc_url( $mysuburl ) . '">访问子站点首页</a>';
} else {
    // 处理无法获取Blog ID的情况
    echo '无法识别该文章所属的子站点';
}

关键说明

  • get_id_from_blogname()是WordPress原生函数,通过站点别名(slug)获取对应的Blog ID,非常可靠。
  • 函数中加入了URL有效性验证和Blog ID有效性检查,避免因异常URL导致的错误。
  • 之所以get_current_blog_id()无效,是因为当前执行环境在网络首页(主站点),它只会返回主站点的ID,而我们需要的是链接指向的目标子站点ID,必须通过URL解析来获取。

内容的提问来源于stack exchange,提问作者Galgóczi Levente

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:15:28