Làm cách nào để có URL chủ đề trong PHP?


38

Tôi cần lấy URL của thư mục chủ đề của mình để tham chiếu một hình ảnh trong thư mục hình ảnh / tiêu đề của chủ đề. Làm thế nào điều này được thực hiện trong PHP?

Câu trả lời:


47

Hàm này sẽ trả về URL thư mục chủ đề để bạn có thể sử dụng nó trong các chức năng khác:

get_bloginfo('template_directory');

Ngoài ra, chức năng này sẽ lặp lại URL thư mục chủ đề cho trình duyệt:

bloginfo('template_directory');

Vì vậy, một ví dụ cho một hình ảnh trong images/headersthư mục chủ đề sẽ là:

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

LƯU Ý: điều này sẽ cung cấp cho bạn đường dẫn đến chủ đề gốc nếu bạn hiện đang sử dụng một chủ đề con chứ không phải chủ đề con đang hoạt động. Một câu trả lời dài hơn dưới đây giải thích điều này chi tiết hơn.
Jason

2
Bạn chỉ có thể sử dụngget_template_directory_uri()
Pei

32

Những gì @EAMann nói, với một lời cảnh báo. Eric nói đúng về cách tiếp cận chung và cách các chức năng bloginfo()get_bloginfo()hoạt động cũng như về cách vượt qua tham số 'template_directory'để có được giá trị bạn cần cho (hầu hết) các chủ đề.

Tuy nhiên, có một cảnh báo và cảnh báo đó là với Chủ đề trẻ em mới hơn . Nếu bạn đang sử dụng một chủ đề con thì 'template_directory'có lẽ không phải là điều bạn muốn trừ khi bạn thực sự đang cố gắng tham khảo một hình ảnh trong thư mục chủ đề gốc. Thay vào đó, đối với các chủ đề trẻ em, những gì bạn có thể muốn vượt qua stylesheet_directory(tôi biết, tôi biết, những cái tên không cho bạn biết chúng là gì nhưng này, đó chỉ là như vậy!) Mượn phần nào từ câu trả lời của Eric stylesheet_directorysẽ giống như thế này ( Tôi rút ngắn ví dụ để nó không bao bọc):

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

Để minh họa điểm tôi đã viết một tệp độc lập nhanh, bạn có thể thả vào thư mục gốc của trang web test.phpvà chạy để xem nội dung đầu ra. Lần đầu tiên chạy với một chủ đề thông thường như TwentyTen sau đó chạy với một chủ đề con:

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

Nếu bạn nhận thấy những điều bạn có thể nhận thấy rằng có nhiều hơn những gì bạn có thể vượt qua bloginfo()get_bloginfo(); nghiên cứu mã và ảnh chụp màn hình dưới đây để biết ý tưởng.

Nhìn vào ảnh chụp màn hình, bạn có thể thấy điều đó stylesheet_directorytrả về điều tương tự như 'template_directory'đối với một chủ đề thông thường nhưng một giá trị khác và có thể là giá trị bạn cần cho một chủ đề con.

Các giá trị trả về của get_bloginfo () có và không có Theme con trong WordPress
(nguồn: mikechinkel.com )

Để rõ ràng trên ảnh chụp màn hình này, wp30.devlà một tên miền chỉ chạy trên máy tính cục bộ của tôi. Nó hiện là một phiên bản của WordPress 3.0.1 và nó được cấu hình tại 127.0.0.1(giống như localhost) trên máy tính xách tay của tôi và tôi sử dụng nó để thử nghiệm các ví dụ đặc biệt như thế này. Tôi đã sử dụng VirtualhostX để thuận tiện trên Mac OS X để giúp tôi thiết lập các .devmiền riêng tư không thể định tuyến đó nhưng bất kỳ ai cũng có thể thực hiện thủ công bằng cách chỉnh sửa tệp máy chủ của máy tính và? tập tin httpd.conf.

Nhân tiện, trong trường hợp bạn không quen thuộc với Chủ đề trẻ em , hai câu trả lời WordPress khác có thể giúp ích gì:


Wow, câu trả lời tuyệt vời. Tôi đã lười biếng với chủ đề tôi đang làm việc bây giờ và không thiết lập một chủ đề trẻ em, nhưng điều này sẽ rất hữu ích trong tương lai. Xin chúc mừng cho kịch bản đó quá. Được mã hóa tốt. Cảm ơn!
Michael Crenshaw

Xin chào, câu trả lời tốt đẹp! Tôi thường sử dụng get_stylesheet_directory_uri(). Tôi có nên sử dụng đồng bằng ol ' get_stylesheet_directory()?
djb

13

Toàn bộ cấu trúc của đề tài được xây dựng trên đỉnh của hai lựa chọn - template(giữ mẹ thư mục theme namre) và stylesheet(giữ trẻ theme folder namr). Nếu không có chủ đề con được sử dụng thì đây là giống nhau.

Để có sự linh hoạt của các bộ lọc, thay vì tùy chọn truy cập trực tiếp, có tương ứng get_template()get_stylesheet().

Bây giờ điều duy nhất còn thiếu là kết hợp những thứ đó với vị trí thư mục chủ đề. Điều này có thể được thực hiện với get_theme_root_uri()và một lần nữa thuận tiện bọc trong get_template_directory_uri()get_stylesheet_directory_uri().

[get_]bloginfo()với template_directoryhoặc các stylesheet_directoryđối số chỉ đơn thuần là kết thúc những điều này và có rất ít lý do để sử dụng nó như thế. Tôi muốn nói rằng nó chỉ gây nhầm lẫn bằng cách có thư mục nói đối số (thường liên quan đến đường dẫn cục bộ), nhưng trả về URL.

Tổng hợp:

  • sử dụng get_template_directory_uri()để chỉ chủ đề hoặc chủ đề phụ huynh
  • sử dụng get_stylesheet_directory_uri()để chỉ hoặc chủ đề con

-1

Tôi dùng cái này (dirname(get_bloginfo('stylesheet_url')))


1
Không có lời giải thích tại sao điều này là tốt hơn so với các giải pháp khác?
fuxia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.