Bagaimana cara mendapatkan URL tema dalam PHP?

38

Saya perlu mendapatkan URL direktori tema saya untuk referensi gambar di direktori gambar / header tema. Bagaimana ini dilakukan dalam PHP?

Michael Crenshaw
sumber

Jawaban:

47

Fungsi ini akan mengembalikan URL direktori tema sehingga Anda dapat menggunakannya di fungsi lain:

get_bloginfo('template_directory');

Atau, fungsi ini akan menggemakan URL direktori tema ke browser:

bloginfo('template_directory');

Jadi contoh untuk gambar di images/headersfolder tema adalah:

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
EAMann
sumber
CATATAN: ini akan memberi Anda jalan ke tema induk jika saat ini Anda menggunakan tema anak, dan bukan tema anak aktif. Jawaban yang lebih panjang di bawah ini menjelaskan hal ini secara lebih rinci.
Jason
2
Anda cukup menggunakanget_template_directory_uri()
Pei
32

Apa yang dikatakan @EAMann , dengan peringatan. Eric benar tentang pendekatan umum dan bagaimana fungsi bloginfo()dan get_bloginfo()kerjanya dan tentang cara melewatkan parameter 'template_directory'untuk mendapatkan nilai yang Anda butuhkan untuk (sebagian besar) tema.

Namun ada peringatan dan peringatan itu dengan Tema Anak yang lebih baru . Jika Anda menggunakan tema anak maka 'template_directory'mungkin bukan yang Anda inginkan kecuali Anda benar-benar mencoba merujuk ke gambar yang ada di direktori tema induk. Alih-alih untuk tema anak-anak apa yang mungkin Anda inginkan adalah untuk lulus stylesheet_directory(saya tahu, saya tahu, nama tidak memberi tahu Anda apa itu tapi hei, begitulah adanya!) Meminjam sedikit dari jawaban Eric menggunakan stylesheet_directoryakan terlihat seperti ini ( Saya menyingkat contoh sehingga tidak akan membungkus):

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

Untuk mengilustrasikan poin saya menulis file mandiri cepat, Anda dapat memasukkan root situs web Anda test.phpdan menjalankan untuk melihat apa yang dihasilkannya. Jalankan pertama dengan tema biasa seperti TwentyTen kemudian jalankan dengan tema anak:

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

Jika Anda memperhatikan hal-hal yang mungkin Anda perhatikan ada banyak hal yang dapat Anda sampaikan bloginfo()dan get_bloginfo(); pelajari kode dan tangkapan layar di bawah untuk ide-ide.

Melihat tangkapan layar Anda dapat melihat bahwa stylesheet_directorymengembalikan hal yang sama seperti 'template_directory'untuk tema biasa tetapi nilai yang berbeda, dan mungkin nilai yang Anda butuhkan untuk tema anak.

Nilai-nilai pengembalian get_bloginfo () dengan dan tanpa Tema Anak di WordPress
(sumber: mikeschinkel.com )

Untuk kejelasan tentang tangkapan layar ini, wp30.devadalah domain yang hanya berjalan di komputer lokal saya. Saat ini merupakan instance dari WordPress 3.0.1 dan dikonfigurasi pada 127.0.0.1(sama dengan localhost) pada laptop saya dan saya menggunakannya untuk menguji contoh ad-hoc seperti ini. Saya menggunakan VirtualHostX sebagai kenyamanan pada Mac OS X untuk membantu saya mengatur .devdomain pribadi non-routable itu, tetapi siapa pun dapat melakukannya secara manual dengan mengedit file host komputer dan file? File httpd.conf.

Omong-omong, jika Anda tidak terbiasa dengan Tema Anak di mana ada dua Jawaban WordPress lain yang mungkin membantu:

MikeSchinkel
sumber
Wow, jawaban yang bagus. Saya malas dengan tema yang sedang saya kerjakan sekarang dan tidak membuat tema anak, tetapi ini akan sangat membantu di masa depan. Selamat atas skrip itu juga. Disandi dengan baik. Terima kasih!
Michael Crenshaw
Hai, jawaban yang bagus! Saya biasanya menggunakan get_stylesheet_directory_uri(). Haruskah saya menggunakan ol biasa get_stylesheet_directory()?
DjB
13

Seluruh struktur tema dibangun di atas dua opsi - template(memegang nama folder tema induk) dan stylesheet(memegang folder nama child child). Jika tidak ada tema anak yang digunakan, ini adalah sama.

Untuk memiliki fleksibilitas filter, daripada opsi akses secara langsung, ada sesuai get_template()dan get_stylesheet().

Sekarang satu-satunya hal yang hilang adalah menggabungkan mereka dengan lokasi folder tema. Ini dapat dilakukan dengan get_theme_root_uri()dan lagi dengan mudah dibungkus get_template_directory_uri()dan get_stylesheet_directory_uri().

[get_]bloginfo()dengan template_directoryatau stylesheet_directoryargumen hanya membungkus ini dan ada sedikit alasan untuk menggunakannya seperti itu. Saya akan mengatakan itu hanya membingungkan dengan memiliki direktori argumen mengatakan (umumnya berkaitan dengan jalur lokal), tetapi mengembalikan URL.

Ringkasan:

  • gunakan get_template_directory_uri()untuk merujuk hanya tema atau induk
  • gunakan hanyaget_stylesheet_directory_uri() untuk tema anak
Jarang
sumber
-1

Saya menggunakan ini (dirname(get_bloginfo('stylesheet_url')))

fja3omega
sumber
1
Tidak ada penjelasan mengapa ini lebih baik daripada solusi lainnya?
fuxia