WordPress开发笔记

WordPress获取当前站点的 siteurl、home、blogname 和 blogdescription 等信息

在 WordPress 多站点环境中,可以通过以下方法获取当前站点的 siteurlhomeblognameblogdescription 等信息:


方法一:直接使用 get_option()

WordPress 的 get_option() 函数可以直接获取当前站点的配置选项:

// 获取站点地址(WordPress 安装地址)
$site_url = get_option('siteurl');

// 获取首页地址(站点前台访问地址)
$home_url = get_option('home');

// 获取站点名称(标题)
$blog_name = get_option('blogname');

// 获取站点描述(副标题)
$blog_description = get_option('blogdescription');

方法二:使用 get_bloginfo() 函数

get_bloginfo() 可以更简洁地获取站点信息,但需注意参数名称:

// 获取站点地址(安装地址)
$site_url = get_bloginfo('wpurl');

// 获取首页地址(前台地址)
$home_url = get_bloginfo('url');

// 获取站点名称(标题)
$blog_name = get_bloginfo('name');

// 获取站点描述(副标题)
$blog_description = get_bloginfo('description');

方法三:使用 WordPress 的 URL 函数(更灵活)

对于 URL 地址,建议使用以下专用函数,它们会自动处理路径和协议(如 HTTPS):

// 获取站点安装地址(等价于 `siteurl`)
$site_url = site_url();

// 获取首页地址(等价于 `home`)
$home_url = home_url();

// 获取站点名称和描述(依然用 get_bloginfo)
$blog_name = get_bloginfo('name');
$blog_description = get_bloginfo('description');

代码示例

在主题模板中输出信息(例如 footer.php):

<?php
// 获取所有信息
$current_site_id = get_current_blog_id();
$site_url = site_url();
$home_url = home_url();
$blog_name = get_bloginfo('name');
$blog_description = get_bloginfo('description');
?>

<div class="site-info">
  <p>站点ID: <?php echo $current_site_id; ?></p>
  <p>安装地址: <?php echo $site_url; ?></p>
  <p>首页地址: <a href="<?php echo $home_url; ?>"><?php echo $home_url; ?></a></p>
  <p>站点名称: <?php echo $blog_name; ?></p>
  <p>站点描述: <?php echo $blog_description; ?></p>
</div>

注意事项

  1. 多站点兼容性
  • 上述方法均基于当前站点的上下文(即 get_current_blog_id() 对应的站点),无需手动切换数据库或站点。
  • 如果需要在其他站点中获取信息(例如在管理后台),需先用 switch_to_blog($site_id) 切换上下文。
  1. site_url vs home_url
  • site_url():返回 WordPress 核心文件的安装地址(如 https://example.com/wp)。
  • home_url():返回用户访问的前台首页地址(如 https://example.com)。
  1. 缓存优化
  • 频繁调用 get_option() 可能影响性能,建议将结果赋值给变量后复用。

替代方案(直接访问数据库)

虽然不推荐,但可以通过全局 $wpdb 直接查询数据库:

global $wpdb;
$current_site_id = get_current_blog_id();
$options = $wpdb->get_results("
  SELECT option_name, option_value 
  FROM {$wpdb->prefix}options 
  WHERE option_name IN ('siteurl', 'home', 'blogname', 'blogdescription')
");

// 将结果转为键值对数组
$options = array_combine(
  array_column($options, 'option_name'),
  array_column($options, 'option_value')
);

$site_url = $options['siteurl'];
$home_url = $options['home'];
$blog_name = $options['blogname'];
$blog_description = $options['blogdescription'];

总结

  • 推荐方法:直接使用 site_url()home_url()get_bloginfo(),简洁高效。
  • 适用场景:主题开发、插件逻辑、多站点定制化功能。
  • 安全提示:输出 URL 或文本时,建议使用 esc_url()esc_html() 转义:
<a href="<?php echo esc_url(home_url()); ?>">
  <?php echo esc_html(get_bloginfo('name')); ?>
</a>

bloginfo()函数

关于 bloginfo() 函数在主题文件中的使用

在 WordPress 主题文件中,当需要直接打印站点信息时,使用 bloginfo() 函数确实可以是一种简洁高效的方式。不过,需要注意以下几点:

直接输出 vs. 赋值给变量‌:

bloginfo() 函数默认行为是直接输出信息到页面上。如果你需要在输出之前对信息进行进一步处理(如条件判断、字符串拼接等),那么先使用 get_bloginfo() 函数将信息赋值给变量会更为灵活。
例如,在需要将站点名称和描述嵌入到 HTML 标签中时,先赋值给变量再输出会更方便进行转义和格式化。

‌参数使用‌:

bloginfo() 函数接受一个参数,该参数指定了要获取的站点信息类型(如 ‘name’、’description’ 等)。确保传递正确的参数以获取所需的信息。

‌性能考虑‌:

虽然 bloginfo() 函数在大多数情况下性能表现良好,但如果在一个页面上频繁调用该函数以获取不同的站点信息,可能会对性能产生一定影响。在这种情况下,考虑将信息赋值给变量并复用,以减少不必要的函数调用。

‌安全性‌:

当使用 bloginfo() 或 get_bloginfo() 输出信息到页面上时,确保对输出进行适当的转义以防止 XSS 攻击。虽然 WordPress 内置函数通常会进行必要的转义处理,但在自定义输出时仍需保持警惕。

‌代码可读性‌:

在团队开发环境中,使用 get_bloginfo() 将信息赋值给变量后再输出可以提高代码的可读性和可维护性。这样做使得其他开发者更容易理解信息的来源和用途。