Get_template_part () işlevini klasörlerle kullanmanın bir yolu var mı?


Yanıtlar:


40

Yapabilirsiniz Aslında, denilen benim tema dizininde bir klasör var /partials/ben gibi dosyaları var klasör ki içinde latest-articles.php, latest-news.phpve latest-statements.phpben kullanarak bu dosyaları yüklemek get_template_part()gibi:

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

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

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

Sadece .phpdosya adından çıkarmayı unutmayın .


Teşekkürler! Bunu keşfetmemem çok üzücü. Codex'in bundan söz etmediği için bunun mümkün olmadığına ikna oldum. Bu soru daha ilginç cevaplar getirdi, fakat bu en basit olanı, muhtemelen ortalamadan en kullanışlı olanı :) (yani yeşil kene ile işaretlensin).
Paul,

1
Neyse ki Kodeksi düzenlemek mümkün olacak, böylece bir sonraki kişi aynı sorunu yaşamayacak. :-)
Dalton,

@Sebastien Gerçekten olabilir: <?php get_template_part('partials/file'); ?>
HauntedSmores

5

Korkarım ki hayır. Eğer kodeks içinde bilmek istediğiniz bir şey değilse, kaynağa olan bağlantıyı takip etmeye çalışın ve kendinize koda bir göz atın ve yönetmeye çalışın.

Bir baktım ve get_template_part işlevi aşağıdaki gibi tanımlandı:

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

Bundan, okuyabilirsiniz, bu get_template_part işlevi sadece amaçlanan bir php dosyası adı oluşturur ve locate_template işlevini çağırır. Bu kullanışlı değil, bu yüzden locate_template fonksiyonuna da bir göz attım:

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

Get bulun şablonu get_template_part denilen php dosyasını arar. Ancak locate_template'i doğrudan kodunuzdan arayabilirsiniz . Ve bu yararlıdır.

Get_template_part ('loop-sigle.php') işlevi yerine bu kodu deneyin (dosyanız temanızın içinde mydir'de bulunur):

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

İlginç kısayol, yükleme sırası veya dosya içeriği üzerinde olumsuz bir etkisi olup olmadığını merak ediyorum.
lowtechsun

2

Fonksiyonun notları get_template_part()şöyle diyor:

Notlar
- Kullanımlar: locate_template ()
- Kullanımlar: do_action () 'get_template_part _ {$ slug}' eylemini çağırır.

Wich, faydalanmanıza izin veriyor locate_template(), diyor ki:

TEMPLATEPATH'ten önce STYLESHEETPATH ​​içinde arama yapar, böylece bir üst temadan miras alan temalar sadece bir dosyayı aşırı yükleyebilir.

TEMPLATEPATHKullanmak istediğiniz alt dizini tanımlarsanız , alt dizindeki get_template_part()dosyaları arayacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.