如何获取PHP中的主题URL?


Answers:


47

该函数将返回主题目录URL,因此您可以在其他函数中使用它:

get_bloginfo('template_directory');

另外,此功能将呼应主题目录网址到浏览器:

bloginfo('template_directory');

因此,主题images/headers文件夹中图像的示例为:

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />

注意:如果您当前正在使用子主题,而不是活动的子主题,这将为您提供主题的路径。以下较长的答案将对此进行更详细的说明。
杰森

2
你可以简单地使用get_template_directory_uri()

32

@EAMann说了什么,但要注意。对于常规方法,功能bloginfo()get_bloginfo()工作方式以及如何传递参数'template_directory'以获取(大多数)主题所需的值,Eric是正确的。

但是,有一个警告,并且该警告与更新的“ 儿童主题”有关。如果您使用的是子主题,那么'template_directory'除非您实际尝试引用父主题目录中的图像,否则可能不是您想要的。相反,对于子主题,您可能希望通过stylesheet_directory(我知道,我知道,名字并没有告诉您它们是什么,但是,嘿,这就是这样!)从Eric的回复中借用一些内容stylesheet_directory看起来像这样(我简化了示例,因此它不会包装):

<img src="<?php bloginfo('stylesheet_directory'); ?>/images/header.jpg" />

为了说明这一点,我编写了一个快速的独立文件,您可以将其放置在网站的根目录中,test.php然后运行以查看其输出。首先以TwentyTen这样的常规主题运行,然后以子主题运行:

<?php
/*
* test.php - Test the difference between Regular and Child Themes
*
*/

include "wp-load.php";

$bloginfo_params = array(
    'admin_email',
    'atom_url',
    'charset',
    'comments_atom_url',
    'comments_rss2_url',
    'description',
    'home',
    'html_type',
    'language',
    'name',
    'pingback_url',
    'rdf_url',
    'rss2_url',
    'rss_url',
    'siteurl',
    'stylesheet_directory',
    'stylesheet_url',
    'template_directory',
    'template_url',
    'text_direction',
    'url',
    'version',
    'wpurl',
);

echo '<table border="1">';
foreach($bloginfo_params as $param) {
    $info = get_bloginfo($param);
    echo "<tr><th>{$param}:</th><td>{$info}</td></tr>";
}
echo '</table>';

如果您注意到一些事情,您可能会注意到,可以传递给bloginfo()和的还有很多东西get_bloginfo();请研究下面的代码和屏幕截图以获取想法。

查看屏幕截图,您会看到stylesheet_directory返回与'template_directory'常规主题相同的东西,但返回的 值不同,并且可能返回子主题所需的值。

带有和不带有WordPress子主题的get_bloginfo()的返回值
(来源:mikeschinkel.com

为了清楚地显示此屏幕截图, wp30.dev该域仅在我的本地计算机上运行。目前,它是WordPress 3.0.1的实例,在笔记本电脑上的配置与127.0.0.1(相同 localhost),我将其用于测试类似这样的临时示例。我在Mac OS X上使用VirtualHostX作为便利来帮助我设置那些不可路由的私有.dev域,但是任何人都可以通过编辑计算机的hosts文件和?来手动完成此操作。httpd.conf文件。

顺便说一句,如果您不熟悉“ 儿童主题”,还有两个其他的WordPress答案可能会有所帮助:


哇,好答案。我对现在正在研究的主题感到很懒,并且没有设置儿童主题,但这在将来会很有帮助。也祝贺该脚本。编码正确。谢谢!
Michael Crenshaw,2010年

嗨,不错的答案!我通常使用get_stylesheet_directory_uri()。我应该使用普通ol' get_stylesheet_directory()吗?
djb 2012年

13

主题的整个结构基于两个选项- template(保留父主题文件夹名称)和stylesheet(保留子主题文件夹名称)。如果没有使用子主题,则它们是相同的。

为了具有过滤器的灵活性,而不是直接访问选项,请相应地添加get_template()get_stylesheet()

现在唯一缺少的是将它们与主题文件夹位置结合在一起。这是可以做到的get_theme_root_uri(),再方便包裹在get_template_directory_uri()get_stylesheet_directory_uri()

[get_]bloginfo()with template_directorystylesheet_directoryarguments仅包装了这些内容,没有理由像这样使用它。我要说的是,只有通过说目录(通常与本地路径有关)而返回URL才令人困惑。

总结:

  • 用于get_template_directory_uri()仅指代或父主题
  • 使用get_stylesheet_directory_uri()只或儿童主题

-1

我用这个 (dirname(get_bloginfo('stylesheet_url')))


1
没有解释为什么这比其他解决方案更好?
fuxia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.