ฉันจะรับ URL ของธีมใน PHP ได้อย่างไร


38

ฉันต้องได้รับ URL ของไดเรกทอรีชุดรูปแบบของฉันเพื่ออ้างอิงรูปภาพในไดเรกทอรีรูปภาพ / ส่วนหัวของชุดรูปแบบ สิ่งนี้ทำใน PHP ได้อย่างไร?

คำตอบ:


47

ฟังก์ชั่นนี้จะคืนค่า URL ไดเรกทอรีธีมเพื่อให้คุณสามารถใช้ในฟังก์ชั่นอื่น ๆ :

get_bloginfo('template_directory');

ฟังก์ชั่นนี้จะสะท้อน URL ไดเรกทอรีธีมไปยังเบราว์เซอร์:

bloginfo('template_directory');

ดังนั้นตัวอย่างสำหรับรูปภาพในimages/headersโฟลเดอร์ชุดรูปแบบจะเป็น:

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

หมายเหตุ: สิ่งนี้จะทำให้คุณมีเส้นทางไปยังธีมหลักหากคุณกำลังใช้ธีมลูกไม่ใช่ธีมลูกที่ใช้งานอยู่ คำตอบที่ยาวขึ้นด้านล่างอธิบายรายละเอียดเพิ่มเติมนี้
Jason

2
คุณสามารถใช้get_template_directory_uri()
Pei

32

สิ่งที่@Eannannพูดพร้อมกับข้อแม้ Eric ถูกต้องเกี่ยวกับวิธีการทั่วไปและวิธีการทำงานbloginfo()และการget_bloginfo()ทำงานและเกี่ยวกับวิธีส่งพารามิเตอร์'template_directory'เพื่อรับค่าที่คุณต้องการสำหรับชุดรูปแบบ (ส่วนใหญ่)

แต่มีข้อแม้และข้อแม้อยู่กับใหม่ธีมส์เด็ก หากคุณกำลังใช้ชุดรูปแบบลูกก็'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'ชุดรูปแบบปกติ แต่มีค่าต่างกันและอาจเป็นค่าที่คุณต้องการสำหรับชุดรูปแบบลูก

ค่าส่งคืนของ get_bloginfo () ที่มีและไม่มีธีมลูกใน WordPress
(ที่มา: mikeschinkel.com )

เพื่อความชัดเจนของภาพหน้าจอ wp30.devนี้เป็นโดเมนที่ทำงานบนเครื่องคอมพิวเตอร์ของฉันเท่านั้น ปัจจุบันเป็นอินสแตนซ์ของ WordPress 3.0.1 และมีการกำหนดค่าที่127.0.0.1(เหมือน localhost) บนแล็ปท็อปของฉันและฉันใช้สำหรับทดสอบตัวอย่างโฆษณาแบบนี้ ฉันใช้VirtualHostXเพื่อความสะดวกใน Mac OS X เพื่อช่วยฉันตั้งค่า.devโดเมนที่ไม่สามารถกำหนดเส้นทางส่วนบุคคลเหล่านั้นได้แต่ใคร ๆ ก็สามารถทำได้ด้วยตนเองโดยแก้ไขไฟล์โฮสต์ของคอมพิวเตอร์และ? ไฟล์ httpd.conf

ในกรณีที่คุณไม่คุ้นเคยกับChild Themesซึ่งเป็นอีกสองเวิร์ดเพรสเวิร์ดที่อาจช่วย:


ว้าวคำตอบที่ดี ฉันขี้เกียจกับชุดรูปแบบที่ฉันกำลังทำอยู่ตอนนี้และไม่ได้ตั้งค่าชุดรูปแบบสำหรับเด็ก แต่สิ่งนี้จะเป็นประโยชน์ในอนาคต ขอแสดงความยินดีกับสคริปต์นี้ด้วย Well-coded ขอบคุณ!
Michael Crenshaw

สวัสดีคำตอบที่ดี! get_stylesheet_directory_uri()ผมมักจะใช้ ฉันควรจะใช้ ol ol 'ธรรมดาget_stylesheet_directory()หรือไม่?
djb

13

โครงสร้างทั้งหมดของชุดรูปแบบสร้างอยู่ด้านบนของสองตัวเลือก - template(ถือโฟลเดอร์ธีมหลัก) และstylesheet(ถือโฟลเดอร์ธีมลูก) หากไม่มีธีมลูกใช้สิ่งเหล่านี้เหมือนกัน

ที่จะมีความยืดหยุ่นของฟิลเตอร์มากกว่าตัวเลือกการเข้าถึงโดยตรงมีความนับถือและget_template()get_stylesheet()

ตอนนี้สิ่งเดียวที่ขาดหายไปคือการรวมสิ่งเหล่านั้นเข้ากับที่ตั้งโฟลเดอร์ของชุดรูปแบบ ซึ่งสามารถทำได้ด้วยget_theme_root_uri()และอีกครั้งห่อในทำเลที่สะดวกและget_template_directory_uri()get_stylesheet_directory_uri()

[get_]bloginfo()ด้วยtemplate_directoryหรือstylesheet_directoryขัดแย้งแค่ล้อมสิ่งเหล่านี้และมีเหตุผลน้อยที่จะใช้มันเช่นนั้น ฉันจะบอกว่ามันเป็นเพียงความสับสนโดยมีข้อโต้แย้งว่าไดเรกทอรี (โดยทั่วไปเกี่ยวข้องกับเส้นทางท้องถิ่น) แต่กลับ URL

Sumary:

  • ใช้get_template_directory_uri()เพื่ออ้างถึงธีมหลักเท่านั้นหรือ
  • ใช้get_stylesheet_directory_uri()ไปเท่านั้นหรือเด็กธีม

-1

ฉันใช้สิ่งนี้ (dirname(get_bloginfo('stylesheet_url')))


1
ไม่มีคำอธิบายว่าทำไมจึงดีกว่าโซลูชันอื่น ๆ
fuxia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.