เป็นไปได้ไหมที่จะสร้างธีมหลาน


15

ถ้าฉันใช้หนึ่งในเฟรมเวิร์กยอดนิยมเช่น Genesis มันเป็นไปได้ไหมที่จะสร้างธีมแกรนด์ชิลด์?

ตัวอย่างเช่นฉันต้องการใช้ Genesis เป็นกระดูกสันหลังของเว็บไซต์ทั้งหมดของฉัน Genesis ถูกเรียกว่า framework แต่จริงๆแล้วเป็นธีมหลัก

จากนั้นฉันเลือกหนึ่งในธีมลูกของ Genesis เพื่อวางขายที่ StudioPress และต้องการกำหนดค่าต่อไปสำหรับแต่ละไซต์ของฉัน ฉันจะสร้างชุดรูปแบบหลานสำหรับทุกไซต์ของฉันและฉันจะไปเกี่ยวกับเรื่องนี้หรือไม่

คำตอบ:


18

ใช่และไม่.

คุณสามารถสร้างชุดรูปแบบของเด็กที่ระบุชุดรูปแบบของเด็กอื่นเป็นผู้ปกครองและ WordPress จะพยายามที่จะใช้

อย่างไรก็ตาม

คุณจะพบกับปัญหาไม่ต้องพูดถึงว่านักพัฒนาซอฟต์แวร์หลักได้ระบุไว้อย่างชัดเจนว่านี่ไม่ใช่พฤติกรรมที่พึงประสงค์และพวกเขาจะไม่พยายามสนับสนุนชุดรูปแบบของหลาน

ตัวอย่างเช่น WP API สร้างความแตกต่างระหว่างสไตล์ชีทและ URL / ไดเรกทอรีเทมเพลตซึ่งสไตล์ชีทอ้างอิงถึงธีมที่ใช้งานอยู่เสมอและเทมเพลตอ้างถึงธีมหลัก แต่ถ้ารวมธีมปู่ย่าตายายget_template_directory_uriอ้างอิงแม่หรือปู่ย่าตายายหรือไม่ ตอนนี้การเรียก API จำนวนมากนั้นคลุมเครือและผู้คนต่างคาดว่าจะมีพฤติกรรมที่แตกต่างกันรวมถึงรหัสที่อยู่ในแกนหลัก นอกจากนี้คุณยังต้องโหลดfunctions.phpทั้งแม่หรือปู่ย่าตายายและตรวจสอบให้แน่ใจว่าได้ทำตามลำดับที่ถูกต้อง

นอกจากนี้ยังถือว่าการปฏิบัติที่ไม่ดีมาก หากคุณมีความจำเป็นสำหรับชุดรูปแบบหลานแล้ววิธีการของคุณมีการเปิดผิดและคุณต้องถอยกลับและประเมินสิ่งต่าง ๆ อีกครั้ง

ฉันจะแนะนำให้คุณหลีกเลี่ยงแนวคิดของชุดรูปแบบหลานมันจะนำไปสู่ปัญหามากขึ้น แต่ฮุคจะกรองการกระทำและ modularity เพิ่มเติมในธีมลูกของคุณควรให้คุณเก็บส่วนประกอบลูกที่ใช้ร่วมกันไว้เหมือนเดิมและให้คุณแยกสาขา / แยกด้วยความยากลำบากเล็กน้อย ลองย้ายองค์ประกอบทั่วไปไปยัง sodn external / git submodule

นอกจากนี้ยังมีโมเดล _s ที่คุณมีธีมลูกของคุณเป็นฐานและแยกมันแทนที่จะให้เป็นพ่อแม่ที่มีความตั้งใจที่คุณทำงานกับสำเนาแทนที่จะเป็นเด็ก / แทนที่


ดังนั้นในกรณีของฉันถ้าฉันไปกับปฐมกาลฉันจะต้องปรับเปลี่ยนชุดรูปแบบเด็กโดยตรงใช่มั้ย ไม่คุ้นเคยกับ Git มากนัก แต่จะสนใจในวิธีการที่ช่วยให้ฉันรักษาธีมลูกเดิมไว้เหมือนเดิม
urok93

ใช่คุณไม่มีตัวเลือกมากมายที่นี่
Tom J Nowell

ฉันสงสัยว่าจะเกิดอะไรขึ้นถ้าคุณพยายามสร้างแก่นเรื่องที่ยิ่งใหญ่
Chris_O

1
คุณพูดถึงว่าวิธีการเลี้ยวผิดถ้าคุณต้องการ เหตุผลที่ฉันอยากรู้เกี่ยวกับเรื่องนี้เป็นเพราะสถานการณ์เช่นใช้ธีมหน้าร้าน WooCommerce พวกเขาขายธีมลูกให้กับหน้าร้านซึ่งปรับแต่งตามความต้องการต่าง ๆ ดังนั้นหากฉันใช้ธีมลูกของพวกเขา แต่ฉันต้องการเปลี่ยนแปลงตัวเองในแบบที่จะไม่ถูกเขียนทับเมื่อพวกเขาอัพเดตธีมลูกของพวกเขา ... ฉันจะทำอย่างไร
Drew Angell

1
ฉันไม่รู้ว่านั่นเป็นข้อ จำกัด ของวิธีสร้างธีมหน้าร้าน ณ จุดนั้นคุณถูกบังคับให้แยกธีมเด็ก
Tom J Nowell

3

ฉันไม่ได้ทดสอบวิธีการที่อธิบายไว้ด้านล่างอย่างเต็มที่ไม่ได้หรือชุดรูปแบบ "หลาน" ปกติ แต่ให้การทำงานของตัวกรองtemplate_include :

    /*
    Plugin Name: Grandchild Themes
    Plugin URI: http://www.who-cares.com/
    Description: A concept for Grandchild themes Plugin
    Author: See Plugin URI
    Version: 0.0.0.0.1-Alpha
    */

    add_action('wp_head', 'grnd_chld_add_headers', 0);
    add_action('init', 'grnd_chld_add_css');

    // Load template if exists. 
function grandchild_template_include( $template ) {

    if ( file_exists( untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/grnd_chld_templates/' . basename( $template ) ) )
        $template = untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/grnd_chld_templates/' . basename( $template );

    return $template;
}

// This is the actual filter that we want .
add_filter( 'template_include', 'grandchild_template_include', 11 );

    function grnd_chld_add_headers () {
        wp_enqueue_style('my_grandchild_style');
    }

    function grnd_chld_add_css() {
        $stamp = @filemtime(plugin_dir_path(__FILE__).'/style.css'); // easy versioning
        wp_register_style ('my_grandchild_style', plugins_url('style.css', __FILE__).'', array(), $stamp);
    }

    // From here , what you got is like a normal functions.php.

นอกจากนี้คุณยังสามารถลองใช้ตัวกรองที่เฉพาะเจาะจงมากขึ้นเช่นในตัวอย่างเช่นarchive_template

add_filter ('archive_template', create_function ('', 'return plugin_dir_path(__FILE__)."archive.php";'));

ทุกอย่างที่พูดและทำฉันไม่แน่ใจว่ามันเป็นวิธีที่ดีที่สุดในการทำสิ่งต่าง ๆ

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