ส่วนเทมเพลตภายในรหัสย่อผลลัพธ์ที่ไม่คาดคิด

Aug 16 2020

ฉันพยายามเรียกส่วนเทมเพลตผ่านรหัสย่อ ฉันได้อ่านทั้งหมดเกี่ยวกับวิธีการทำสิ่งนี้ซ้ำแล้วซ้ำอีกบนไซต์นี้และหลังจากได้ลองทำสิ่งต่างๆหลายอย่างแล้วก็ยังไม่สามารถเรียกสตริงเวลา php echo แบบง่ายๆได้ ชื่อไฟล์คือ test-one.phpนี่คือสิ่งที่ฉันได้ลอง:

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

รหัสส่วนเทมเพลตคือ

<?php

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

ดูเหมือนว่ามันควรจะทำงานไม่ใช่เหรอ? ฉันผิดตรงไหน?

คำตอบ

2 Howdy_McGee Aug 17 2020 at 00:25

get_template_part()ฟังก์ชั่นไม่ถือว่าชื่อไดเรกทอรีใด ๆ ที่คุณต้องชัดเจนจัดหา นอกจากนี้ยังสัมพันธ์กับไดเร็กทอรีธีมที่ใช้งานอยู่ ดังนั้นในหลาย ๆ ตัวอย่างของคุณจึงมองหาแม่แบบในรูทของธีมที่ใช้งานอยู่ รูปแบบที่ถูกต้องจะเป็น:

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

หากคุณต้องการคุณสามารถเปลี่ยนชื่อโฟลเดอร์เป็นincหรือincludes- ตามอำเภอใจ คุณต้องแสดงการเปลี่ยนแปลงนี้ในการเรียกใช้ฟังก์ชัน


หมายเหตุด้านข้าง WordPress อนุญาตให้คุณส่งผ่านพารามิเตอร์ที่ 2 และจะมองหาไฟล์ที่เชื่อมต่อด้วยเส้นประ ตัวอย่างเช่นสิ่งนี้จะใช้งานได้:

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

ข้อดีของสิ่งนี้คือช่วยให้คุณมี "ประเภท" ของส่วนหนึ่ง ๆ คุณอาจมีcontent-post.phpไฟล์เพื่อส่งออกเนื้อหาโพสต์ของคุณและไฟล์content-page.phpเพื่อส่งออกเนื้อหาหน้าของคุณ จากนั้นในธีมของคุณคุณสามารถเรียกใช้เทมเพลตของคุณโดย:

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

เพียงแค่ช่วยให้มีไดนามิกมากขึ้น


หมายเหตุด้านอื่น ทุกครั้งที่คุณมีปัญหากับฟังก์ชันประเภทนี้คุณสามารถใช้ได้ตลอดเวลา:

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

สิ่งนี้จะแสดงเส้นทางเทมเพลตที่ WordPress พยายามเข้าถึงเทมเพลตโดย