Content.php và content-single.php có giống nhau không?


8

Tôi hiểu rằng khi sử dụng get_template_part('content', get_post_format());nó sẽ giúp chọn một post formattrang cụ thể theo định dạng bài đăng.

Và nếu không có định dạng bài đăng 'tức là tiêu chuẩn', thì nó sẽ chuyển sang content.php

Nhưng nếu tôi sử dụng content-single.phpvới một số logic như thế này:

if (get_post_format() == false) {
    get_template_part('content', 'single');
    } else {
        get_template_part('content', get_post_format());
}

Tôi vẫn cần content.phptrang? Có bất kỳ chức năng nào khác mà tôi không biết về?

Câu trả lời:


3

Không, content.phpcontent-single.phpkhông phải là điều tương tự.

Trong ví dụ của bạn MÃ:

if (get_post_format() == false) {
    get_template_part('content', 'single');
} else {
    get_template_part('content', get_post_format());
}

WordPress sẽ tải content-single.phpkhi get_post_format()false. Tuy nhiên, get_template_part( $slug, $name )vẫn có thể thử tải content.phpkhi bạn gọi nó get_template_part('content', get_post_format());trong ví dụ sau:

  1. get_post_format()trả về (ví dụ) video.

  2. Nhưng bạn không có content-video.phptập tin phần mẫu.

Vì vậy, về cơ bản, ngay cả khi get_post_format()không false, content.phpvẫn sẽ cung cấp cho bạn phần mẫu mặc định nếu phần mẫu liên quan đến định dạng bài đăng tương ứng không được tạo.

Dòng dưới cùng: bất kể chính$sluglà gì, luôn luôn nên giữ tệp phần mẫu mặc định làm phần mẫu dự phòng cuối cùng (trong trường hợp của bạncontent.phplà tệp phần mẫu dự phòng mặc định đó). Vì vậy, CÓ, bạn vẫn có thể cần nó . Vì vậy, đừng xóa nó, để nó một mình.

Sau đây là một phần của CODE từ chức năng cốt lõi get_template_part. Bạn sẽ thấy rằng, lõi luôn tải $templates[] = "{$slug}.php";dưới dạng tệp dự phòng cuối cùng:

function get_template_part( $slug, $name = null ) {
    // ... more CODE from WP core
    $templates = array();
    $name = (string) $name;
    if ( '' !== $name )
        $templates[] = "{$slug}-{$name}.php";

    $templates[] = "{$slug}.php"; 
    locate_template($templates, true, false);
}

Sau đó, trong locate_templatechức năng, nó lặp qua $templatesmảng cho đến khi tìm thấy tệp tương ứng, với CODE sau:

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;
        } elseif ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
            $located = TEMPLATEPATH . '/' . $template_name;
            break;
        } elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
            $located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
            break;
        }
    }
    if ( $load && '' != $located )
        load_template( $located, $require_once );

    return $located;
}

Vì vậy, như bạn có thể thấy từ CODE ở trên, nếu bạn xóa content.phpvà nếu người dùng chủ đề có định dạng bài đăng mà bạn không có tệp phần mẫu, WordPress sẽ không tìm thấy tệp mẫu để quay lại, vì vậy sẽ chỉ cần tải không có gì trong trường hợp đó Như một nỗ lực cuối cùng, WordPress cố gắng tải một tệp phần mẫu từ wp-includes/theme-compat/thư mục lõi, nhưng không có content.phptệp phần mẫu trong lõi WP.

Lưu ý: Tuy nhiên, nếu bạn đang xây dựng một chủ đề con và chủ đề gốc đã chứacontent.phptệp, thì bạn không cầncontent.phptệp trong chủ đề con (nếu bạn không thực hiện bất kỳ sửa đổi nào ở đó), vì trong trường hợp đó, WordPress sẽ sử dụngcontent.phptệpcủa chủ đề gốc làmtệp phần dự phòng.


0

Bạn có thể nhận được chỉ với một mẫu (content.php). Điều đó thường ít hơn lý tưởng.

Từ blog của teamtreehouse sẽ xóa câu hỏi của bạn.

Đối với tôi cách tiếp cận đó là một cách dự phòng.

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.