WordPress首页wp_title()返回空值,求原生PHP解决方案
解决WordPress首页wp_title()返回空的问题
我来帮你拆解问题并给出原生PHP的解决方案:
为什么你之前的代码无效?
你写的四个三元表达式都踩了同一个小坑:当条件为真(首页场景)时,你只是返回了"Home"字符串,但没有用echo把它输出到页面;而wp_title('')默认会直接输出内容(因为它的第二个参数$display默认是true),所以非首页能正常显示,但首页时没有任何内容输出,导致标题为空。
解决方案1:修复三元运算符写法
把字符串用echo输出,同时调整wp_title的参数让它返回字符串而非直接输出,写法更统一:
<title><?php echo is_front_page() ? "Home" : wp_title('', false); ?></title>
这里wp_title('', false)的第二个参数false表示让函数返回标题字符串,而不是直接输出,这样整个三元表达式的结果都通过echo输出,首页就能正常显示"Home"了。
解决方案2:更灵活的条件判断(推荐)
如果想让首页显示站点名称(更符合SEO规范),其他页面显示「页面标题 + 站点名称」,可以这样写:
<title><?php if (is_front_page()) { // 首页显示站点名称,也可以改成你想要的"Home" echo get_bloginfo('name'); } else { // 非首页显示页面标题 + 分隔符 + 站点名称 echo wp_title('', false) . ' | ' . get_bloginfo('name'); } ?></title>
解决方案3:通过过滤器全局控制(更规范)
如果你想在全局统一管理标题逻辑,推荐在主题的functions.php中添加过滤器:
add_filter('wp_title', 'custom_home_page_title', 10, 2); function custom_home_page_title($title, $sep) { // 判断是否是首页 if (is_front_page()) { return 'Home'; // 这里可以换成get_bloginfo('name')获取站点名称 } // 非首页保留原有标题逻辑 return $title; }
之后模板里直接调用wp_title即可:
<title><?php wp_title(''); ?></title>
补充:is_front_page()和is_home()的区别
顺便提一句,is_front_page()判断的是你在WordPress后台设置的「首页」(不管是静态页面还是最新文章列表);而is_home()判断的是「文章列表页」。如果你的首页设置为静态页面,is_home()会指向你单独设置的「文章页」,所以用is_front_page()判断首页更准确。
内容的提问来源于stack exchange,提问作者Ali Bhutta
相关产品推荐
相关产品推荐

