ฉันจะทำให้ธีมลูกของฉันใช้การตั้งค่าที่กำหนดเองใหม่เมื่อแม่ของมันเปิดใช้งานได้อย่างไร


17

สถานการณ์

  1. เลือกธีมปี 2015 กำหนดการตั้งค่าต่าง ๆ เช่นรูปภาพพื้นหลังรูปภาพส่วนหัวชื่อไซต์และสโลแกน
  2. แต่อย่าแตะต้องเนื้อหาของไฟล์ของธีมใด ๆ
  3. ใช้ธีมลูกของ Codexเพื่อสร้างธีมลูกขั้นต่ำสุดของธีมปี 2015
  4. เปิดใช้งานธีมลูกใหม่

อ๊ะ?

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

รูปลักษณ์ดั้งเดิมของไซต์พร้อมการตั้งค่าที่กำหนดเองเพียงไม่กี่อย่างสำหรับธีมปี 2015:

SofietjeWonders ด้วยธีมที่ปรับแต่งเอง

เว็บไซต์ที่เป็นลักษณะที่มี 2015 ธีมเด็กมาซึ่งมีเพียงส่วนหัวที่จำเป็นในstyle.cssและมีเพียง enqueues รูปแบบตามที่แนะนำโดยหน้าเด็กธีมของ Codex function.phpในของมัน

ป้อนคำอธิบายรูปภาพที่นี่

คำถาม

ฉันจะทำอย่างไรเพื่อให้การเปิดใช้งานชุดรูปแบบลูกรักษาการปรับแต่งและค่าเริ่มต้นของชุดรูปแบบหลัก

ในกรณีนี้รูปภาพส่วนหัวและพื้นหลังและการลบ (ปิดการใช้งาน?) ของวิดเจ็ตเริ่มต้น (แถบด้านข้าง / ส่วนหัว)


หมายเหตุ

สร้างธีมลูกของธีมที่กำหนดเองที่มีน้ำหนักมากแล้วอาจฟังดูซ้ำซ้อน แต่นั่นเป็นเรื่องเกี่ยวกับการปรับแต่งโดยการแก้ไขไฟล์ของธีม

คำถามนี้เมื่อเปิดใช้งานชุดรูปแบบของเด็กการตั้งค่าหลักใดที่ต้องถูกรีเซ็ตเช่น; เมนูที่กำหนดเอง ฯลฯ ? ดูเหมือนจะถามสิ่งที่ฉันดูเหมือนจะเป็นหลังจาก น่าเสียดายที่คำตอบเดียวนั้นเกี่ยวกับคุณลักษณะที่ไม่ตรงกันซึ่งไม่ใช่ในกรณีของฉันและไม่ได้รับความคิดเห็นของ OP เพื่อผลเหมือนกัน

ฉันก็มองไปที่

คำตอบ:


9

ฉันให้ +1 กับคำตอบของ @ webtoureเพราะให้ทิศทางที่ถูกต้อง แต่ฉันคิดว่ามันขาดการตรวจสอบ

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

ตามความเข้าใจของฉันเกี่ยวกับ OP เงื่อนไขเหล่านี้จำเป็น

นอกจากนี้ปัญหาหนึ่งที่คุณต้องคำนึงถึงคือสิ่งที่ต้องทำกับตัวดัดแปลงชุดรูปแบบของชุดรูปแบบลูกที่เปิดใช้งานหากมีอยู่แล้ว

ในคำตอบ @webtoure พวกเขาจะถูกเก็บไว้ในการสำรองข้อมูลซึ่งอาจช่วยให้คุณประหยัดได้ในบางสถานการณ์ แต่ WordPress จะไม่จดจำพวกเขาตามค่าเริ่มต้นดังนั้นพวกเขาจึงจำเป็นต้องใช้รหัสเพิ่มเติมบางอย่าง

ฉันคิดว่ามันจะดีกว่าถ้าจะสืบทอดการแก้ไขชุดรูปแบบจากชุดรูปแบบหลักเฉพาะครั้งแรกที่เปิดใช้งานชุดรูปแบบลูก

ในระยะสั้นเงื่อนไขที่ฉันต้องการตรวจสอบก่อนที่จะสืบทอด mods ธีมจากชุดรูปแบบหลักคือ:

  • ชุดรูปแบบที่ใช้งานก่อนหน้านี้จะต้องเป็นแม่ของชุดรูปแบบลูกที่กำลังเปิดใช้งาน
  • ชุดรูปแบบลูกที่กำลังเปิดใช้งานจะต้องไม่เคยเปิดใช้งานมาก่อน

เพื่อให้แน่ใจว่าเงื่อนไขที่สองฉันจะใช้ตัวเลือกที่กำหนดเองเนื่องจาก WordPress ไม่ได้มีวิธีในการตรวจสอบนี้

นี่คือรหัสโปรดอ่านความคิดเห็นแบบอินไลน์สำหรับคำอธิบายว่าเกิดอะไรขึ้น:

add_action( 'switch_theme', function( $new_name, \WP_Theme $new_theme ) {

    // get the previously active theme
    $previous = get_option( 'theme_switched', -1 );

    // get the parent of current theme, will be false if no parent
    $parent = $new_theme->parent() ? $new_theme->get_template() : false;

    // current stylesheet name
    $stylesheet = get_option( 'stylesheet' );

    // has the theme being activated ever been activated before?
    $lastActive = get_option( $stylesheet . '_last_active', false );

    // if previouly active theme is the parent of the the child theme being activated
    // and it has never been activated before..
    if ( ! $lastActive && $parent === $previous ) {

        // update "last_active" option so following code won't run again for this theme
        update_option( $stylesheet . '_last_active', current_time( 'timestamp', 1 ) );

        // get the theme mods of the parent
        $previousMods = get_option( 'theme_mods_' . $parent, array() );

        // inherit current theme mods from parent theme mods
        update_option( 'theme_mods_' . $stylesheet, $previousMods );
    }

}, 10, 2 );

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

นอกจากนี้จะเกิดอะไรขึ้นถ้าผู้ใช้เปิดใช้งานธีมอื่นโดยไม่ตั้งใจก่อนเปิดใช้งานธีมลูกที่ต้องการ? รหัสจะไม่ทำงานและความสัมพันธ์( theme_switched, current_theme) ไม่เกี่ยวข้องกับการเริ่มต้น
webtoure

1
@MarjanVenema ฉันจะมีความสุขมากถ้าคุณจะให้เงินรางวัลที่จะwebtoure
gmazzap

1
@MarjanVenema gmazzap ได้ให้ความเห็นเกี่ยวกับกระบวนการคิดของเขาและยังแนะนำให้แก้ไขข้อมูลโค้ดของฉันด้วย ฉันคิดว่าถ้าใครสมควรได้รับรางวัลมันเป็นเขา นอกจากนี้ฉันไม่ตอบคำถามสำหรับจุดที่ไร้ประโยชน์อย่างสมบูรณ์ ฉันชอบ: มีปฏิสัมพันธ์กับผู้คนความท้าทายและช่วยเหลือโดยทั่วไปเมื่อฉันทำได้
webtoure

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