it-swarm-vi.tech

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

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?

38
Michael Crenshaw

Hàm này sẽ return 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ẽ echo URL thư mục chủ đề tới trình duyệt:

bloginfo('template_directory');

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

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

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 hàm bloginfo()get_bloginfo() hoạt động và về cách truyền tham số 'template_directory' để nhận giá trị bạn cần cho (hầu hết) chủ đề.

Tuy nhiên, có một cảnh báo và hãy cẩn thận với phiên bản mới hơnChủ đề con. Nếu bạn đang sử dụng một chủ đề con thì 'template_directory' có thể không phải là thứ bạn muốn trừ khi bạn thực sự đang cố gắng tham chiếu đến một hình ảnh trong thư mục chủ đề chính. Thay vào đó, đối với các chủ đề con, điều bạn có thể muốn là 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à cách nó!) Mượn phần nào từ câu trả lời của Eric bằng cách sử dụng stylesheet_directory sẽ như thế nào cái 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 của mình dưới dạng test.php và 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ể chuyển cho 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 rằng stylesheet_directory trả về cùng một thứ như 'template_directory' cho 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.

 The return values of get_bloginfo() with and without a Child Theme in WordPress 
(nguồn: mikechinkel.com )

Để rõ ràng trên ảnh chụp màn hình này, wp30.dev là 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 ở 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 tên miền .dev riêng tư không thể định tuyến này 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 vớiChủ đề conhai câu trả lời WordPress khác có thể giúp ích gì:

32
MikeSchinkel

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

Để có tính linh hoạt của các bộ lọc, thay vì tùy chọn truy cập trực tiếp, có 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 được bao bọc thuận tiện trong get_template_directory_uri()get_stylesheet_directory_uri() .

[get_]bloginfo() với các đối số template_directory hoặc stylesheet_directory chỉ đơn thuần bao bọc các đối số 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() để tham khảo chỉ hoặc phụ huynh theme
  • sử dụng get_stylesheet_directory_uri() để chỉ hoặc con theme
12
Rarst