Có cách nào để sử dụng get_template_part () với các thư mục không?


26

Tôi đang tự hỏi liệu có cách nào để sử dụng get_template_part () với các thư mục không? Thư mục chính của tôi hiện có rất nhiều tệp vì tôi đặt mọi phần tử có thể sử dụng lại trong một tệp riêng. Tôi muốn đặt chúng vào các thư mục sau đó.

Không có thông tin về điều đó trong Codex: http://codex.wordpress.org/Function_Reference/get_template_part

Câu trả lời:


40

Trong thực tế, bạn có thể, tôi có một thư mục trong thư mục chủ đề của tôi được gọi /partials/vào trong thư mục đó tôi có các file như latest-articles.php, latest-news.phplatest-statements.phpvà tôi tải những tập tin sử dụng get_template_part()như:

get_template_part('partials/latest', 'news');

get_template_part('partials/latest', 'articles');

get_template_part('partials/latest', 'statements');

Chỉ cần đừng quên bỏ qua .phptừ tên tập tin.


Cảm ơn! Thật đơn giản đến nỗi thật xấu hổ khi tôi không khám phá ra điều này. Tôi đã bị thuyết phục rằng điều này là không thể bởi vì Codex không đề cập đến điều đó. Câu hỏi này mang lại nhiều câu trả lời thú vị hơn nhưng câu hỏi này là đơn giản nhất vì vậy nó có thể là câu trả lời hữu ích nhất cho người bình thường :) (vì vậy hãy để nó được đánh dấu bằng dấu tick màu xanh lá cây).
Paul

1
May mắn thay, có thể chỉnh sửa Codex để người tiếp theo sẽ không gặp vấn đề tương tự. :-)
Dalton

@Sebastien Bạn thực sự có thể ex: <?php get_template_part('partials/file'); ?>
HauntedSmores

5

Tôi không sợ. Nếu trong codex không phải là thứ bạn muốn biết, hãy thử theo liên kết đến nguồn và tự mình xem mã và cố gắng quản lý nó.

Tôi đã xem và hàm get_template_part được định nghĩa như sau:

function get_template_part( $slug, $name = null ) {
    do_action( "get_template_part_{$slug}", $slug, $name );

    $templates = array();
    if ( isset($name) )
        $templates[] = "{$slug}-{$name}.php";

    $templates[] = "{$slug}.php";

    locate_template($templates, true, false);
}

Từ đó, bạn có thể đọc ra, hàm get_template_part đó chỉ tạo ra một tên tệp php dự định và gọi hàm định vị định vị. Điều này không hữu ích, vì vậy tôi cũng đã xem xét về chức năng định vị:

function locate_template($template_names, $load = false, $require_once = true ) {
    $located = '';
    foreach ( (array) $template_names as $template_name ) {
        if ( !$template_name )
            continue;
        if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
            $located = STYLESHEETPATH . '/' . $template_name;
            break;
        } else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
            $located = TEMPLATEPATH . '/' . $template_name;
            break;
        }
    }

    if ( $load && '' != $located )
        load_template( $located, $require_once );

    return $located;
}

Nhận định vị tìm kiếm mẫu cho tệp php được gọi từ get_template_part. Nhưng bạn có thể gọi xác định vị trí trực tiếp từ mã của bạn. Và điều này rất hữu ích.

Hãy thử mã này thay vì hàm get_template_part ('loop-sigle.php') (tệp của bạn nằm trong mydir bên trong chủ đề của bạn):

locate_template( 'mydir/loop-single.php', true, true );

Phím tắt thú vị, tôi tự hỏi nếu nó có bất kỳ hậu quả tiêu cực về trình tự tải hoặc nội dung tập tin.
lowTechsun

2

Các ghi chú của hàm get_template_part()nói:

Ghi chú
- Sử dụng: xác định vị trí ()
- Sử dụng: do_action () Gọi hành động 'get_template_part _ {$ slug}'.

Không cho phép bạn sử dụng locate_template(), wich nói:

Tìm kiếm trong STYLESHEETPATH ​​trước TEMPLATEPATH để các chủ đề kế thừa từ chủ đề gốc có thể chỉ quá tải một tệp.

Nếu bạn xác định TEMPLATEPATHvới thư mục con bạn muốn sử dụng, get_template_part()sẽ tìm kiếm các tệp trong thư mục con của bạn.

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.