WordPress函数:get_bloginfo 获取网站信息
编辑文章简介
get_bloginfo() 是 WordPress 中获取网站基本信息(如网站名称、描述、URL等)的核心函数,它返回这些信息的字符串值,而不是直接输出,让你能在代码中灵活处理和复用这些数据。
语法
get_bloginfo( string $show = '', string $filter = 'raw' )
位置: wp-includes/general-template.php
内部调用关系:
get_bloginfo() 内部主要通过 get_option() 函数从数据库的 wp_options 表中获取相应的选项值。对于不同类型的信息,它会调用不同的 WordPress 选项或函数:
– 'name' → get_option('blogname')
– 'description' → get_option('blogdescription')
– 'url' → home_url()(经过 trailingslashit 处理)
– 'wpurl' → site_url()(经过 trailingslashit 处理)
– 其他参数也有相应的内部处理逻辑
参数详解:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
$show |
字符串 | '' |
指定要获取的信息类型。可选值包括:'name' – 网站标题'description' – 网站副标题/描述'url' – 网站地址'wpurl' – WordPress安装地址'admin_email' – 管理员邮箱'charset' – 网站字符集'version' – WordPress版本'language' – 网站语言代码'stylesheet_url' – 当前主题样式表URL'stylesheet_directory' – 当前主题目录URL'template_url' – 父主题目录URL'pingback_url' – XML-RPC pingback URL'atom_url' – Atom供稿URL'rss_url' – RSS供稿URL |
$filter |
字符串 | 'raw' |
返回值的过滤方式:'raw' – 返回原始值,不进行转义'display' – 返回经过 wp_kses() 过滤的值,适用于直接显示 |
返回值:
– 返回指定类型的博客信息字符串
– 如果指定的 $show 参数无效,返回空字符串
用法
获取信息后存储到变量中,或在条件判断、字符串拼接中使用。
// 获取网站基本信息
$site_name = get_bloginfo( 'name' );
$site_description = get_bloginfo( 'description' );
$site_url = get_bloginfo( 'url' );
// 在条件判断中使用
if ( get_bloginfo( 'language' ) === 'zh-CN' ) {
// 针对中文网站的特殊处理
load_chinese_fonts();
}
// 动态生成页面标题
function generate_page_title() {
if ( is_front_page() ) {
return get_bloginfo( 'name' ) . ' - ' . get_bloginfo( 'description' );
} else {
return wp_title( '|', false, 'right' ) . get_bloginfo( 'name' );
}
}
// 在模板中使用
echo '<title>' . esc_html( generate_page_title() ) . '</title>';
易错点
混淆 get_bloginfo() 和 bloginfo()
这是新手最常见的错误,两者功能相似但行为不同。
// ❌ 错误:期望 get_bloginfo() 直接输出内容
get_bloginfo( 'name' ); // 这行代码不会输出任何内容,只是返回值
// ❌ 错误:将 bloginfo() 的返回值赋给变量
$site_name = bloginfo( 'name' ); // $site_name 将是 NULL,因为 bloginfo() 直接输出并返回 void
未考虑多站点环境
在多站点网络中,get_bloginfo() 获取的是当前站点的信息。
// ❌ 错误:在多站点网络中,假设获取的是主站点信息
$site_name = get_bloginfo( 'name' ); // 这获取的是当前切换到的站点的名称
// ✅ 正确:明确指定要获取哪个站点的信息
if ( is_multisite() ) {
// 获取主站点信息
$main_site_id = get_network()->site_id;
switch_to_blog( $main_site_id );
$main_site_name = get_bloginfo( 'name' );
restore_current_blog();
// 获取当前站点信息
$current_site_name = get_bloginfo( 'name' );
echo "主站点: " . esc_html( $main_site_name ) . "<br>";
echo "当前站点: " . esc_html( $current_site_name );
}
最佳实践
未正确处理空值
某些博客信息可能未被设置,直接使用可能导致意外错误。
// ❌ 错误:直接使用可能为空的值
$description = get_bloginfo( 'description' );
$meta_description = '<meta name="description" content="' . $description . '">';
// 如果描述为空,会生成:<meta name="description" content="">
// ✅ 正确:检查并处理空值
$description = get_bloginfo( 'description' );
if ( ! empty( $description ) ) {
echo '<meta name="description" content="' . esc_attr( $description ) . '">';
} else {
// 提供默认值或跳过输出
echo '<meta name="description" content="' . esc_attr( get_bloginfo( 'name' ) ) . '">';
}
性能优化:减少重复调用
虽然 get_bloginfo() 有内置缓存,但在循环或频繁调用的地方仍应优化。
// 不推荐:在循环中多次调用
while ( have_posts() ) {
the_post();
echo '<article>';
echo '<h2>' . get_the_title() . ' | ' . get_bloginfo( 'name' ) . '</h2>';
echo '<p>发布于 ' . get_bloginfo( 'url' ) . '</p>';
echo '</article>';
}
// 推荐:在循环外获取一次
$site_name = get_bloginfo( 'name' );
$site_url = get_bloginfo( 'url' );
while ( have_posts() ) {
the_post();
echo '<article>';
echo '<h2>' . esc_html( get_the_title() ) . ' | ' . esc_html( $site_name ) . '</h2>';
echo '<p>发布于 ' . esc_url( $site_url ) . '</p>';
echo '</article>';
}
// 更高级的缓存:使用对象缓存(如果可用)
function get_cached_blog_info( $show ) {
$cache_key = 'blog_info_' . $show;
$cached = wp_cache_get( $cache_key );
if ( false === $cached ) {
$cached = get_bloginfo( $show );
wp_cache_set( $cache_key, $cached, '', 3600 ); // 缓存1小时
}
return $cached;
}
// 使用缓存的版本
$site_name = get_cached_blog_info( 'name' );
安全性增强:根据上下文转义
永远不要信任来自数据库的数据,即使是管理员在后台输入的信息。
// 场景1:作为HTML内容输出
$site_name = get_bloginfo( 'name' );
echo '<h1>' . esc_html( $site_name ) . '</h1>';
// 场景2:作为HTML属性值
$site_url = get_bloginfo( 'url' );
echo '<a href="' . esc_url( $site_url ) . '" title="返回首页">首页</a>';
// 场景3:在JavaScript中使用
$site_data = array(
'name' => esc_js( get_bloginfo( 'name' ) ),
'url' => esc_js( get_bloginfo( 'url' ) ),
);
echo '<script>';
echo 'var siteInfo = ' . wp_json_encode( $site_data ) . ';';
echo 'console.log("网站名称:", siteInfo.name);';
echo '</script>';
// 场景4:在表单字段中作为值
echo '<input type="email" name="admin_email" value="' . esc_attr( get_bloginfo( 'admin_email' ) ) . '">';
// 场景5:在CSS中
$stylesheet_url = get_bloginfo( 'stylesheet_url' );
echo '<style>';
echo '@import url("' . esc_url( $stylesheet_url ) . '");';
echo '</style>';
// 场景6:在RSS/Atom提要中
echo '<link rel="alternate" type="application/rss+xml" title="' . esc_attr( get_bloginfo( 'name' ) ) . ' RSS Feed" href="' . esc_url( get_bloginfo( 'rss2_url' ) ) . '">';