มีวิธีการใช้ get_template_part () กับโฟลเดอร์หรือไม่?


26

ฉันสงสัยว่าจะมีวิธีใช้ get_template_part () กับโฟลเดอร์หรือไม่? โฟลเดอร์หลักของฉันมีไฟล์จำนวนมากในขณะนี้เพราะฉันใส่องค์ประกอบที่สามารถใช้งานได้ทั้งหมดไว้ในไฟล์แยกต่างหาก ฉันต้องการวางไว้ในโฟลเดอร์แล้ว

ไม่มีข้อมูลเกี่ยวกับสิ่งนั้นใน Codex: http://codex.wordpress.org/Function_Reference/get_template_part

คำตอบ:


40

ในความเป็นจริงคุณสามารถฉันมีโฟลเดอร์ในไดเรกทอรีรูปแบบของฉันเรียกว่า/partials/ในโฟลเดอร์ในการที่ผมมีไฟล์เช่นlatest-articles.php, latest-news.phpและlatest-statements.phpและผมโหลดไฟล์เหล่านี้โดยใช้get_template_part()ที่ชอบ:

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

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

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

อย่าลืมที่จะละเว้น.phpจากชื่อไฟล์


ขอบคุณ! มันง่ายมากที่มันน่าละอายที่ฉันไม่ได้ค้นพบสิ่งนี้ ฉันเชื่อว่านี่เป็นไปไม่ได้เพราะ Codex ไม่ได้กล่าวถึง คำถามนี้ให้คำตอบที่น่าสนใจมากขึ้น แต่คำถามนี้ง่ายที่สุดดังนั้นอาจเป็นคำตอบที่มีประโยชน์ที่สุดสำหรับคนทั่วไป :) (ดังนั้นให้ทำเครื่องหมายด้วยเครื่องหมายสีเขียว)
พอล

1
โชคดีที่มีความเป็นไปได้ที่จะแก้ไข Codex ดังนั้นบุคคลต่อไปจะไม่มีปัญหาเดียวกัน :-)
Dalton

@Sebastien จริงๆคุณสามารถอดีต: <?php get_template_part('partials/file'); ?>
HauntedSmores

5

ฉันเกรงว่าจะไม่. หากใน codex ไม่ใช่สิ่งที่คุณอยากรู้ลองไปตามลิงค์ไปยังแหล่งที่มาและดูรหัสและลองจัดการมันดู

ฉันได้ดูและฟังก์ชั่น get_template_part ถูกกำหนดไว้ด้านล่าง:

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

จากนี้คุณสามารถอ่านได้ว่าฟังก์ชั่น get_template_part เพียงแค่สร้างชื่อไฟล์ php ตั้งใจและฟังก์ชั่นการโทร สิ่งนี้ไม่มีประโยชน์ดังนั้นฉันจึงได้ดูที่ฟังก์ชัน find_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;
}

รับค้นหาเทมเพลตค้นหาไฟล์ php ที่เรียกจาก get_template_part แต่คุณสามารถโทรหา locate_template ได้โดยตรงจากโค้ดของคุณ และสิ่งนี้มีประโยชน์

ลองใช้รหัสนี้แทนฟังก์ชั่น get_template_part ('loop-sigle.php') (ไฟล์ของคุณอยู่ใน mydir ภายในธีมของคุณ):

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

ทางลัดที่น่าสนใจฉันสงสัยว่ามันจะมีผลกระทบด้านลบต่อลำดับการโหลดหรือเนื้อหาไฟล์
lowtechsun

2

หมายเหตุฟังก์ชั่นget_template_part()พูดว่า:

หมายเหตุ
- การใช้งาน: locate_template ()
- ใช้: do_action () เรียกการกระทำ 'get_template_part _ {$ slug}'

ซึ่งช่วยให้คุณใช้ประโยชน์ได้locate_template()ซึ่งบอกว่า:

ค้นหาใน STYLESHEETPATH ​​ก่อน TEMPLATEPATH เพื่อให้ธีมที่สืบทอดจากธีมหลักสามารถโหลดไฟล์ได้เพียงไฟล์เดียว

หากคุณกำหนดTEMPLATEPATHด้วยไดเรกทอรีย่อยที่คุณต้องการใช้get_template_part()จะค้นหาไฟล์ในไดเรกทอรีย่อยของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.