Wie erhalte ich die Theme-URL in PHP?

38

Ich muss die URL meines Themenverzeichnisses abrufen, um auf ein Bild im Bild- / Kopfzeilenverzeichnis des Themas zu verweisen. Wie geht das in PHP?

Michael Crenshaw
quelle

Antworten:

47

Diese Funktion wird zurückkehren das Thema Verzeichnis URL , so dass Sie es in anderen Funktionen verwenden können:

get_bloginfo('template_directory');

Alternativ wird diese Funktion echo das Thema Verzeichnis URL an den Browser:

bloginfo('template_directory');

Ein Beispiel für ein Bild im Themenordner images/headerswäre also:

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
EAMann
quelle
HINWEIS: Auf diese Weise erhalten Sie den Pfad zum übergeordneten Thema, wenn Sie derzeit ein untergeordnetes Thema und nicht das aktive untergeordnete Thema verwenden. Eine längere Antwort unten erklärt dies detaillierter.
Jason
2
Sie können einfach verwendenget_template_directory_uri()
Pei
32

Was @EAMann gesagt hat, mit einer Einschränkung. Eric hat Recht mit der allgemeinen Herangehensweise und der Funktionsweise bloginfo()und get_bloginfo()der Übergabe des Parameters 'template_directory', um den Wert zu erhalten, den Sie für (die meisten) Themen benötigen.

Es gibt jedoch eine Einschränkung und diese Einschränkung gilt für die neueren untergeordneten Themen . Wenn Sie ein untergeordnetes Design verwenden, 'template_directory'ist dies wahrscheinlich nicht das, was Sie möchten, es sei denn, Sie versuchen tatsächlich, auf ein Bild zu verweisen, das sich im übergeordneten Designverzeichnis befindet. Stattdessen möchten Sie für untergeordnete Themen wahrscheinlich Folgendes übergeben stylesheet_directory(Ich weiß, ich weiß, die Namen sagen Ihnen nicht, was sie sind, aber hey, so ist das eben!) Etwas von Erics Antwort zu übernehmen, stylesheet_directorywürde so aussehen ( Ich habe das Beispiel gekürzt, damit es nicht umbrochen wird.

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

Um den Punkt zu veranschaulichen, habe ich eine schnelle Standalone-Datei geschrieben, die Sie im Stammverzeichnis Ihrer Website ablegen test.phpund ausführen können, um zu sehen, was sie ausgibt. Führen Sie zuerst ein reguläres Thema wie TwentyTen aus, und führen Sie dann ein untergeordnetes Thema aus:

<?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>';

Wenn Sie Dinge bemerken, werden Sie vielleicht bemerken, dass es viel mehr gibt, an was Sie weitergeben können, bloginfo()und get_bloginfo(); Lesen Sie den Code und den Screenshot unten, um Ideen zu erhalten.

Auf dem Screenshot sehen Sie, dass dies stylesheet_directorydasselbe Ergebnis liefert wie 'template_directory'bei einem normalen Thema, jedoch mit einem anderen Wert und wahrscheinlich dem Wert, den Sie für ein untergeordnetes Thema benötigen.

Die Rückgabewerte von get_bloginfo () mit und ohne Child Theme in WordPress
(Quelle: mikeschinkel.com )

Aus Gründen der Übersichtlichkeit wird in diesem Screenshot wp30.deveine Domain angezeigt, die nur auf meinem lokalen Computer ausgeführt wird. Es handelt sich derzeit um eine Instanz von WordPress 3.0.1, die auf meinem Laptop 127.0.0.1(genauso wie localhostauf meinem Laptop) konfiguriert ist, und ich verwende sie zum Testen von Ad-hoc-Beispielen wie diesem. Ich habe VirtualHostX unter Mac OS X verwendet, um diese privaten, nicht routbaren .devDomänen einzurichten. Jeder kann dies jedoch manuell tun, indem er die Hosts-Datei des Computers und das Symbol? httpd.conf Datei.

Übrigens, falls Sie nicht mit untergeordneten Themen vertraut sind, wo sind zwei andere WordPress-Antworten, die helfen könnten:

MikeSchinkel
quelle
Wow, tolle Antwort. Ich war mit dem Thema, an dem ich gerade arbeite, faul und habe kein Kinderthema erstellt, aber das wird in Zukunft sehr hilfreich sein. Herzlichen Glückwunsch auch zu diesem Drehbuch. Gut codiert. Vielen Dank!
Michael Crenshaw
Hallo, schöne Antwort! Ich benutze normalerweise get_stylesheet_directory_uri(). Soll ich einfach ol 'verwenden get_stylesheet_directory()?
DJB
13

Die gesamte Struktur des Themas templatebasiert auf zwei Optionen - (übergeordnetes Thema, Ordnername) und stylesheet(untergeordnetes Thema, Ordnername). Wenn kein untergeordnetes Thema verwendet wird, sind diese identisch.

Um die Flexibilität von Filtern zu haben, anstatt direkt auf die Option zuzugreifen, gibt es dementsprechend get_template()und get_stylesheet().

Jetzt fehlt nur noch die Verknüpfung mit dem Speicherort des Themenordners. Dies kann mit gemacht werden get_theme_root_uri()und wieder bequem in gewickelt get_template_directory_uri()und get_stylesheet_directory_uri().

[get_]bloginfo()mit template_directoryoder stylesheet_directoryArgumente umschließen nur diese und es gibt wenig Grund, es so zu verwenden. Ich würde sagen, es ist nur verwirrend, wenn das Argument "Verzeichnis" lautet (bezieht sich normalerweise auf lokale Pfade), aber URLs zurückgibt.

Summe:

  • Verwenden Sie get_template_directory_uri()diese Option, um nur auf ein übergeordnetes Thema zu verweisen
  • verwenden , get_stylesheet_directory_uri()um nur Kinder Thema
Rarst
quelle
-1

ich benutze das (dirname(get_bloginfo('stylesheet_url')))

fja3omega
quelle
1
Keine Erklärung, warum das besser ist als die anderen Lösungen?
fuxia