web-dev-qa-db-ja.com

PHPでテーマのURLを取得する方法

テーマのimage/headersディレクトリにある画像を参照するには、自分のテーマディレクトリのURLを取得する必要があります。これはPHPでどのように行われますか?

38

この関数は return テーマディレクトリの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 は新しいChild Themesにあります。あなたが子テーマを使っているなら、'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'と同じことを返しますが、異なる値を返します。子のテーマではおそらく必要な値です。

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.1localhostと同じ)に設定されています。私はこのような特別な例をテストするためにそれを使用します。私は VirtualHostX をMac OS X上で便利なものとしてこれらのプライベートなルーティング不可能な.devドメインを設定する手助けとして使用しましたが、だれでもコンピュータのhostsファイルとそのファイルを編集することによって手動でそれを行うことができます。 httpd.confファイル.

ちなみに、あなたがChild Themesに慣れていないのであれば、他に2つのWordPress Answersが役立ちます。

32
MikeSchinkel

テーマの全体構造は、template(親テーマフォルダnamreを保持)とstylesheet(子テーマフォルダnamrを保持)の2つのオプションの上に構築されます。子供のテーマが使用されていない場合、これらは同じです。

直接アクセスするのではなく、フィルタの柔軟性を持たせるために、 get_template()get_stylesheet() があります。

今不足している唯一のことは、テーマフォルダの場所とそれらを組み合わせることです。これは get_theme_root_uri() で行うことができ、やはり get_template_directory_uri()get_stylesheet_directory_uri() でラップするのが便利です。

template_directoryまたはstylesheet_directory引数を持つ [get_]bloginfo() は単にこれらをラップするだけであり、そのように使用する理由はほとんどありません。私はそれが議論をディレクトリ(一般的にはローカルパスに関連している)と言っているがURLを返すことによって混乱させるだけであると思うでしょう。

概要:

  • onlyまたはparent themeを参照するにはget_template_directory_uri()を使用してください
  • onlyまたはchild themeにget_stylesheet_directory_uri()を使用
12
Rarst