修复WordPress中get_page_by_title()函数已弃用问题的方法
替代WordPress已弃用的get_page_by_title()函数
你的代码问题所在
- 错误通过
meta_query查询name字段:页面标题实际存储在post_title字段,并非自定义元数据 - 未指定
post_type为page,默认会查询所有文章类型,和原函数仅查找页面的逻辑不符
完全兼容原功能的替代函数
下面的函数完全复刻get_page_by_title()的核心行为——仅查询已发布页面,精确匹配标题,返回对应ID:
function get_page_id_by_title($title, $post_type = 'page') { $args = array( 'post_type' => $post_type, 'post_status' => 'publish', 'posts_per_page' => 1, 'no_found_rows' => true, // 优化性能,无需计算总条数 'fields' => 'ids', // 仅获取ID,提升查询效率 'post_title' => $title, // 精确匹配页面标题 ); $query = new WP_Query($args); if (!empty($query->posts)) { wp_reset_postdata(); return $query->posts[0]; } return null; }
使用示例
和你原来的调用方式完全一致:
$pageId = get_page_id_by_title(lang('page-title'));
扩展说明
- 如果需要返回完整的页面对象(而非仅ID),将
'fields' => 'ids'改为'fields' => 'all',然后返回$query->posts[0]即可 - 若需支持标题模糊匹配,可将
'post_title' => $title替换为's' => $title,但该参数会同时匹配标题和内容;如果要仅模糊匹配标题,可改用以下查询条件:'meta_query' => array( array( 'key' => 'post_title', 'value' => $title, 'compare' => 'LIKE', ) ),
内容的提问来源于stack exchange,提问作者Bao Thien
相关产品推荐
相关产品推荐

