Apakah ada cara untuk menggunakan get_template_part () dengan folder?

Jawaban:

40

Sebenarnya Anda bisa, saya punya folder di direktori tema saya dipanggil /partials/di folder yang saya punya file seperti latest-articles.php, latest-news.phpdan latest-statements.phpdan saya memuat file-file ini menggunakan get_template_part()seperti:

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

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

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

Hanya saja, jangan lupa untuk menghilangkan .phpdari nama file.

Ahmad M
sumber
Terima kasih! Sederhananya sehingga aku merasa malu tidak menemukannya. Saya yakin ini tidak mungkin karena Codex tidak menyebutkannya. Pertanyaan ini membawa jawaban yang lebih menarik tetapi yang ini adalah yang paling sederhana sehingga mungkin yang paling berguna untuk orang kebanyakan :) (jadi biarkan itu ditandai dengan centang hijau).
Paul
1
Untungnya mungkin untuk mengedit Codex sehingga orang berikutnya tidak akan memiliki masalah yang sama. :-)
Dalton
@Sebastien Anda sebenarnya dapat ex: <?php get_template_part('partials/file'); ?>
HauntedSmores
5

Aku takut tidak. Jika dalam kodeks bukan sesuatu yang ingin Anda ketahui, coba ikuti tautan ke sumber dan lihat sendiri kodenya dan coba kelola.

Saya telah melihat dan fungsi get_template_part didefinisikan sebagai berikut:

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);
}

Dari sini, Anda dapat membacanya, bahwa fungsi get_template_part hanya membuat nama file php yang diinginkan dan fungsi panggil loc_template. Ini tidak berguna, jadi saya juga melihat pada fungsi loc_template:

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;
}

Dapatkan cari templat templat untuk file php yang dipanggil dari get_template_part. Tetapi Anda dapat menghubungi loc_template langsung dari kode Anda. Dan ini berguna.

Cobalah kode ini alih-alih fungsi get_template_part ('loop-sigle.php') (file Anda terletak di mydir di dalam tema Anda):

locate_template( 'mydir/loop-single.php', true, true );
david.binda
sumber
Pintasan yang menarik, saya bertanya-tanya apakah ada konsekuensi negatif pada urutan pemuatan atau isi file.
lowtechsun
2

Catatan fungsi get_template_part()mengatakan:

Catatan
- Penggunaan: loc_template ()
- Penggunaan: do_action () Memanggil tindakan 'get_template_part _ {$ slug}'.

Wich memungkinkan Anda untuk memanfaatkan locate_template(), yang mengatakan:

Mencari di STYLESHEETPATH ​​sebelum TEMPLATEPATH sehingga tema yang diwarisi dari tema induk bisa kelebihan satu file.

Jika Anda menentukan TEMPLATEPATHdengan subdirektori yang ingin Anda gunakan, get_template_part()akan mencari file di subdirektori Anda.

Mike Madern
sumber