我需要获取主题目录的URL来引用主题的image / headers目录中的图像。如何在PHP中完成?

#1 楼

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

get_bloginfo('template_directory');


或者,此函数会将主题目录URL回显到浏览器:

bloginfo('template_directory');


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

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


评论


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

–詹森
16-10-19在12:40



您可以简单地使用get_template_directory_uri()

–贝
18年6月20日在5:33

#2 楼

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

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


<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'相同的东西,但是返回的值不同,并且可能是子主题所需的值。

(来源:mikeschinkel.com)


为了清晰起见,
wp30.dev是仅在我的本地计算机上运行的域。它当前是
WordPress 3.0.1的一个实例,并且它在笔记本电脑上的127.0.0.1(与
localhost相同)上进行了配置,我使用它
来测试即席示例像这样。
我在Mac OS X上使用VirtualHostX作为便利,帮助我设置了那些不可路由的私有.dev域,但是任何人都可以通过
手动进行操作。编辑计算机的主机文件和
? httpd.conf文件。


顺便说一句,以防万一您不熟悉“儿童主题”,另外两个WordPress答案可能会有所帮助:


让二十一个主题的标题变矮吗?
自定义WordPress主题而不更改它?


评论


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

– Michael Crenshaw
10年8月21日在13:32

嗨,不错的答案!我通常使用get_stylesheet_directory_uri()。我应该使用普通的get'stylesheet_directory()吗?

– djb
2012年1月18日上午10:59

#3 楼

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

为了具有过滤器的灵活性,而不是直接访问选项,因此有get_template()get_stylesheet()

现在是唯一的缺少的是将那些与主题文件夹位置结合在一起。可以使用get_theme_root_uri()完成此操作,然后再次方便地将其包装在get_template_directory_uri()get_stylesheet_directory_uri()中。带有[get_]bloginfo()template_directory参数的stylesheet_directory只是将它们包装起来,没有理由像这样使用它。我要说的是,只有通过说目录(通常与本地路径有关),而是返回URL来混淆。

摘要:


使用get_template_directory_uri()可以仅指代或父主题
对仅指代或子主题使用get_stylesheet_directory_uri()


#4 楼

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

评论


没有解释为什么这比其他解决方案更好?

– fuxia♦
2012年11月5日,下午3:52