PHP’deki tema URL’sini nasıl alabilirim?


38

Temanın resim / başlık dizinindeki bir resme başvuruda bulunmak için tema dizininin URL’sini almam gerekiyor. PHP'de bu nasıl yapılır?

Yanıtlar:


47

Bu işlev tema dizini URL'sini döndürür , böylece diğer işlevlerde de kullanabilirsiniz:

get_bloginfo('template_directory');

Alternatif olarak, bu işlev olacaktır yankı tarayıcıya tema dizini URL:

bloginfo('template_directory');

Dolayısıyla, temalar images/headersklasöründeki bir resme örnek :

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

NOT: Bu , şu anda bir alt tema kullanıyorsanız etkin alt tema yerine kullanıyorsanız , ana temanın yolunu gösterecektir . Aşağıda daha uzun bir cevap bunu daha ayrıntılı olarak açıklamaktadır.
Jason,

2
Sadece kullanabilirsinizget_template_directory_uri()
Pei

32

@EAMann ne dedi, bir ihtar ile. Eric genel yaklaşım ve nasıl fonksiyonları hakkında doğru bloginfo()ve get_bloginfo()çalışma ve parametre geçmesi konusunda 'template_directory'(çoğu) temalar için ihtiyaç değer elde etmek.

Ancak bir uyarı var ve bu uyarı yeni Çocuk Temalarında . Bir alt tema kullanıyorsanız 'template_directory', aslında ana tema dizinindeki bir resme başvurmaya çalışmadığınız sürece muhtemelen istediğiniz bir şey değildir. Çocuk temaları yerine muhtemelen istediğin şey geçmek stylesheet_directory(biliyorum, biliyorum, isimler sana ne olduklarını söylemedi ama hey, işte böyle oldu!) Eric'in cevabını kullanarak biraz ödünç almak stylesheet_directoryşöyle olurdu ( Örneği kısaltdım, böylece sarmayacaktı):

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

Noktayı göstermek için hızlı ve bağımsız bir dosya yazdım, web sitenizin kök dizinine bırakabilir test.phpve neyin çıktı verdiğini görmek için koşabilirsiniz. Önce TwentyTen gibi normal bir temayla koşun, sonra bir çocuk temayla koşun:

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

Bir şeyleri fark ederseniz, geçebileceklerinizden çok daha fazlası olduğunu farkedebilirsiniz bloginfo()ve get_bloginfo(); fikirler için kodu ve aşağıdaki ekran görüntüsünü inceleyin.

Ekran görüntüsüne bakıldığında bunun normal bir temayla stylesheet_directoryaynı şeyi 'template_directory'ancak farklı bir değer ve muhtemelen bir alt tema için ihtiyacınız olan değeri döndürdüğünü görebilirsiniz .

WordPress'te bir Child Theme olan ve olmayan get_bloginfo () öğelerinin döndürme değerleri
(kaynak: mikeschinkel.com )

Bu ekran görüntüsünün netliği için, wp30.devyalnızca yerel bilgisayarımda çalışan bir etki alanı. Şu anda bir WordPress 3.0.1 örneği ve dizüstü bilgisayarımda 127.0.0.1(aynı) olarak yapılandırılmış ve bunun localhostgibi geçici örnekleri test etmek için kullanıyorum. VirtualHostX'i Mac OS X'te bu özel yönlendirilemeyen .devetki alanlarını ayarlamama yardımcı olmak için kolaylık olarak kullandım ancak herkes bilgisayarın ana bilgisayar dosyasını ve? httpd.conf dosyası.

Bu arada, yardımcı olabilecek diğer iki WordPress Yanıtı olan Çocuk Temalarını bilmiyorsanız :


Vay, harika cevap. Şu an üzerinde çalıştığım temayla tembel oldum ve bir çocuk teması kurmadım, ancak bu gelecekte çok yardımcı olacaktır. Bu senaryo için de tebrikler. İyi kodlu. Teşekkürler!
Michael Crenshaw

Merhaba, güzel cevap! Genelde kullanırım get_stylesheet_directory_uri(). Düz ol kullanmalı mıyım get_stylesheet_directory()?
djb

13

Temanın tüm yapısı iki seçeneğin üzerine kuruludur - template(ana tema klasör adını stylesheettutan ) ve (alt tema klasör adını tutan). Kullanılan çocuk teması yoksa bunlar aynıdır.

Filtrelerin esnekliğini sağlamak için doğrudan erişim seçeneğinden ziyade, buna göre get_template()ve vardır get_stylesheet().

Şimdi eksik olan tek şey, bunları tema klasörü konumuyla birleştirmek. Bu ile yapılabilir get_theme_root_uri()ve yine uygun sarılmış get_template_directory_uri()ve get_stylesheet_directory_uri().

[get_]bloginfo()ile template_directoryveya stylesheet_directoryargümanlarla yalnızca bunları sarar ve böyle kullanmak için çok az neden vardır. Sadece dizini (genellikle yerel yollarla ilgili) söyleyen bir argüman alarak kafa karıştırıcı olduğunu, ancak URL’leri döndürdüğünü söyleyebilirim.

Sumary:

  • yalnızca veya ana temayı get_template_directory_uri()ifade etmek için kullanın
  • kullanmak get_stylesheet_directory_uri()için yalnızca veya çocuk teması

-1

Bunu kullanıyorum (dirname(get_bloginfo('stylesheet_url')))


1
Bunun neden diğer çözümlerden daha iyi olduğunu açıklama yok mu?
fuxia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.