WordPress中如何通过标题获取页面URL?get_page_by_title已弃用
通过文章标题获取URL的简便方案(替代已弃用的get_page_by_title)
针对WordPress 6.2.0后get_page_by_title()被弃用的情况,这里提供两个无需直接使用WP_Query类的简便方案,适配多数据库测试场景:
方案1:基于get_posts封装轻量函数
get_posts是WordPress内置的简化查询函数,无需手动实例化WP_Query,代码简洁且符合官方规范:
function get_url_by_title($title, $post_type = 'post') { $posts = get_posts([ 'title' => $title, 'post_type' => $post_type, 'post_status' => 'publish', 'numberposts' => 1, 'fields' => 'ids' // 仅返回ID,减少数据开销 ]); return !empty($posts) ? get_permalink($posts[0]) : false; }
使用方式和你期望的get_url_by_title('文章标题', 'post')完全一致,找不到匹配文章时返回false,逻辑和原get_page_by_title对齐。
方案2:直接通过$wpdb查询(适配多数据库场景)
如果是多数据库测试场景,直接用全局$wpdb对象查询更灵活,避免依赖上层查询封装:
function get_url_by_title($title, $post_type = 'post') { global $wpdb; $post_id = $wpdb->get_var($wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type = %s AND post_status = 'publish' LIMIT 1", $title, $post_type )); return $post_id ? get_permalink($post_id) : false; }
- 用
$wpdb->prepare防止SQL注入,确保安全; - 直接精准匹配标题和文章类型,仅返回第一条匹配的发布状态文章URL;
- 多数据库场景下,可通过切换
$wpdb的数据库连接配置轻松适配不同测试环境。
补充说明
- 上述方案均为精确标题匹配,若需模糊匹配,可将SQL中的
post_title = %s改为post_title LIKE %s,并传入带通配符的标题参数(如'%'.$title.'%'); - 若存在多篇同标题文章,仅返回最早发布的那篇的URL,和原
get_page_by_title的行为一致。
内容的提问来源于stack exchange,提问作者DimitFromCave
相关产品推荐
相关产品推荐

