it-swarm.cn

如何在PHP中获取主题URL?

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

38
Michael Crenshaw

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

get_bloginfo('template_directory');

或者,此函数将 echo 浏览器的主题目录URL:

bloginfo('template_directory');

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

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

什么@EAMann说,有一个警告。 Eric对于一般方法以及函数bloginfo()get_bloginfo()如何工作以及如何传递参数'template_directory'以获得(大多数)主题所需的值是正确的。

然而,有一个警告,并且 caveat 与较新的儿童主题。如果您使用的是子主题,则'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'相同的内容,用于常规主题但具有不同的值,可能还有子主题所需的值。

The return values of get_bloginfo() with and without a Child Theme in WordPress 
(来源: mikeschinkel.com

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

顺便说一下,如果你不熟悉儿童主题其他两个可能有帮助的WordPress答案:

32
MikeSchinkel

整个主题结构建立在两个选项之上 - template(持有父主题文件夹namre)和stylesheet(持有子主题文件夹namr)。如果没有使用儿童主题,则这些是相同的。

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

现在唯一缺少的是将它们与主题文件夹位置相结合。这可以通过 get_theme_root_uri() 完成,并再次方便地包含在 get_template_directory_uri()get_stylesheet_directory_uri() 中。

[get_]bloginfo()template_directorystylesheet_directory参数只是包装这些,没有理由像这样使用它。我要说的只是让参数说出目录(通常与本地路径相关),但返回URL只会引起混淆。

Sumary:

  • 使用get_template_directory_uri()来引用 only或parent theme
  • 使用get_stylesheet_directory_uri() only或child theme
12
Rarst