Kısa kod içinde şablon parçası, beklenmeyen sonuç

Aug 16 2020

Kısa kod aracılığıyla bir şablon parçasını çağırmaya çalışıyorum. Bunu bu sitede defalarca nasıl yapacağımı okudum ve yine de birkaç şeyi denedikten sonra hala basit bir php eko zaman dizgisi çağıramıyorum. Dosya adı test-one.php. İşte denediğim şey:

function test_2( $attr ) {
    ob_start();
    get_template_part( 'test', 'one' );
    return ob_get_clean();
}

add_shortcode('test2', 'test_2');

function test_2( $attr ) {
    ob_start();
    get_template_part( 'test-one' );
    return ob_get_clean();
}
add_shortcode('test2', 'test_2');

function test_2( $attr ) {
    ob_start();
    get_template_part( 'wp-content/themes/theme-name/template-parts/test-one' );
    return ob_get_clean();
}

add_shortcode('test2', 'test_2');

Şablon parça kodu

<?php

echo "Current as of <br>  ".date("m-d-Y h:i:sa");

Çalışması gerekiyor gibi görünüyor, değil mi? Nerede yanlış yapıyorum?

Yanıtlar

2 Howdy_McGee Aug 17 2020 at 00:25

get_template_part()İşlevi açıkça tedarik zorunda herhangi bir dizin adını üstlenmez. Aynı zamanda aktif tema diziniyle de ilgilidir. Örneklerinizin çoğunda, aktif temanızın kökündeki şablonu arıyordu. Doğru format şu şekilde olacaktır:

get_template_part( 'template-parts/test-one' );

İsterseniz, klasörü incveya olarak yeniden adlandırabilirsiniz includes- bu isteğe bağlıdır. Bu değişikliği işlev çağrısına yansıtmanız yeterlidir.


Bir yan not olarak, WordPress 2. bir parametreyi geçmenize izin verir ve bir tire ile birleştirilen dosyaları arayacaktır. Örneğin, bu da işe yarayacaktır:

get_template_part( 'template-parts/test', 'one' );

Bunun yararı, belirli bir parçanın birden çok "türüne" sahip olmanıza izin vermesidir. content-post.phpYazı içeriğinizin content-page.phpçıktısını almak ve sayfa içeriğinizi çıkarmak için bir dosyanız olabilir . Ardından temanızda şablonunuzu şu şekilde arayabilirsiniz:

get_template_part( 'template-parts/content', $post->post_type );

Sadece biraz daha dinamik olmasına izin veriyor.


Başka bir yan not. Bu tür işlevlerle ne zaman sorun yaşarsanız her zaman kullanabilirsiniz:

add_action( 'init', function() {
    $template = locate_template( $template_string_here ); printf( '<pre>%s</pre>', print_r( $template, 1 ) );
    die( 'end' );
} );

Bu, WordPress'in şablona erişmeye çalıştığı şablon yolunu çıkaracaktır.