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

如何通过URL获取文章、页面、CPT及归档页面ID?

解决WPML中获取归档页面对应语言版本的问题

问题分析

url_to_postid() 和 get_page_by_path() 无法获取博客、商店这类归档页面的ID,核心原因是这类归档属于WordPress/WooCommerce的虚拟归档页面,并非实际的Post/Page类型内容,因此没有对应的Post ID,常规ID获取函数自然无法返回有效值。

解决方案

1. 处理博客归档页面

WordPress允许将普通页面设置为博客文章列表入口,这个页面有真实Post ID,可通过后台选项获取后用WPML转换:

// 获取博客归档绑定的页面ID
$blog_page_id = get_option('page_for_posts');
// 转换为目标语言的页面ID($target_lang为目标语言代码,如'en'/'fr')
$translated_blog_id = icl_object_id($blog_page_id, 'page', true, $target_lang);
// 获取对应语言的博客归档URL
$translated_blog_url = get_permalink($translated_blog_id);

2. 处理WooCommerce商店页面

商店页面同理,是后台设置的商品列表入口页面,可通过WooCommerce选项获取ID后转换:

// 获取商店页面的ID
$shop_page_id = get_option('woocommerce_shop_page_id');
// 转换为目标语言的页面ID
$translated_shop_id = icl_object_id($shop_page_id, 'page', true, $target_lang);
// 获取对应语言的商店URL
$translated_shop_url = get_permalink($translated_shop_id);

3. 通用归档URL转换(无需依赖ID)

如果不确定页面类型,或需处理自定义归档,可直接使用WPML内置函数直接转换URL:

// $target_lang为目标语言代码,直接传入原URL获取对应语言版本
$translated_archive_url = icl_get_translated_url($last_visited_url, $target_lang);

该函数会自动识别URL对应的内容类型(含各类归档),无需依赖Post ID即可返回对应语言的URL。

4. 自动判断URL所属归档类型

若需先判断URL对应哪种归档,可解析路径后匹配:

// 解析原URL获取路径部分
$parsed_url = parse_url($last_visited_url);
$path = trim($parsed_url['path'], '/');

// 判断是否为博客归档
$blog_slug = get_post_field('post_name', get_option('page_for_posts'));
if ($path === $blog_slug) {
    // 执行博客归档的转换逻辑
}

// 判断是否为商店归档
$shop_slug = get_post_field('post_name', get_option('woocommerce_shop_page_id'));
if ($path === $shop_slug) {
    // 执行商店归档的转换逻辑
}

内容的提问来源于stack exchange,提问作者Rajeev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:35:09