after_setup_theme จะทำงานเสมอ


11

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

echo '<script type="text/javascript">alert("This action was run")</script>';

และด้วยเหตุนี้จึงได้รับการแจ้งเตือนจาวาสคริปต์ในทุกคำขอของผู้ดูแลระบบและทุกคำขอของ front-end (ฉันมีการตั้งค่าเครือข่ายดังนั้นจึงเห็นได้ชัดบนเว็บไซต์ที่ชุดรูปแบบนี้ไม่ได้เปิดใช้งาน

ดังนั้นคำถามคือนี่เป็นข้อผิดพลาดหรือไม่? ฉันกำลังทำอะไรผิดหรือเปล่า? นี่คือรหัสที่ฉันใช้:

add_action( 'after_setup_theme', 'fwp_setup' );
function fwp_setup(){
    // -- Unrelated code remove for the sake of brevity 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
    echo '<script type="text/javascript">alert("This action was run")</script>';
}

ความเข้าใจใด ๆ จะได้รับการชื่นชมมาก!


การแก้ไข: after_switch_themeทำสิ่งที่ฉันตั้งใจไว้ที่นี่ มันจะเริ่มทำงานหลังจากธีมเปลี่ยนเป็นธีมของคุณ switch_themeหนึ่งของการแก้ปัญหาดังกล่าวนี้ใช้ สิ่งนี้ไม่มีผลลัพธ์ที่ต้องการเนื่องจากจะเกิดขึ้นเมื่อเปลี่ยนจากธีมของคุณเท่านั้น อ้างอิงความคิดเห็น Trac นี้
Aaron Wagner

โปรดโพสต์สิ่งนั้นเป็นคำตอบแทนที่จะเป็นความคิดเห็นต่อคำถามของคุณ :)
Chip Bennett

2
ขอโทษ. มันจะไม่ปล่อยให้ฉันทำอย่างนั้นเลย ฉันจะเพิ่มมันเป็นคำตอบในไม่ช้า
แอรอนวากเนอร์

คำตอบ:


8

การแก้ไข: after_switch_themeทำสิ่งที่ฉันตั้งใจไว้ที่นี่ มันจะเริ่มทำงานหลังจากธีมเปลี่ยนเป็นธีมของคุณ switch_themeหนึ่งของการแก้ปัญหาดังกล่าวนี้ใช้ สิ่งนี้ไม่มีผลลัพธ์ที่ต้องการเนื่องจากจะเกิดขึ้นเมื่อเปลี่ยนจากธีมของคุณเท่านั้น

นี่คือบทความที่ฉันพบว่าเป็นข้อมูลอ้างอิง: http://core.trac.wordpress.org/ticket/7795#comment:29

นี่คือรหัสการแก้ไขของฉัน

add_action( 'after_switch_theme', 'fwp_theme_setup' );
function fwp_theme_setup(){ 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
}

5

การafter_setup_themeกระทำมีวัตถุประสงค์เพื่อดำเนินการกับการโหลด WordPress ทุกครั้ง มันเป็นเพียงส่วนหนึ่งของกระบวนการในระหว่างที่ WordPress เรียกใช้ระบบเทมเพลตกำหนดพารามิเตอร์การตั้งค่าต่างๆสำหรับธีมและดำเนินการกับการประมวลผลที่ตามมาเช่นการกำหนดเทมเพลตที่ถูกต้องที่จะแสดงเป็นต้น

กล่าวอีกนัยหนึ่งafter_setup_themeแทนจุดที่WordPressตั้งค่าธีมปัจจุบันไม่ใช่จุดที่ผู้ดูแลระบบ เปิดใช้งานและ / หรือกำหนดค่าธีมปัจจุบัน

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


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

5
init !== activation. โดยปกติคุณเรียก__construct()ใช้ฟังก์ชันใน php ด้วยเช่นinitกัน นั่นหมายถึง: เริ่มต้นอินสแตนซ์
ไกเซอร์

ตั๋ว trac อายุ 7 ปีและดูเหมือนว่าจะไม่ได้รับการแก้ไข!
numediaweb

4

น่าเสียดายที่ไม่มี hook การเปิดใช้งานธีม อย่างไรก็ตามคำถามนี้ให้การแก้ไขสำหรับสิ่งนั้น

เพียงใช้ 'hook การเปิดใช้งานธีม' เพื่อเปิดใช้งานปลั๊กอิน

ทางออกที่ดีพร้อมหลอดเลือดดำเดียวกันเป็นหนึ่งในนี้ ทั้งคู่ใช้switch_themeตะขอเป็นหลัก


ตามความคิดเห็น OP และตั๋ว trac ที่เชื่อมโยง - after_switch_themeเป็นตะขอที่จำเป็น

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

add_action( 'after_switch_theme', 'wpse50298_setup' );
function wpse50298_setup($theme_switching_from){
    // Your theme is being activated
}

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

add_action( 'switch_theme', 'wpse50298_deactivate' );
function wpse50298_deactivate($theme_switching_to){
    // Your theme is being deactivated
}

ตัวเลือกเหล่านี้ไม่เหมาะกับฉัน switch_themeทำงานได้หลังจากปิดการใช้งานธีม อย่างไรก็ตามafter_switch_themeทำงานได้อย่างสมบูรณ์แบบ
Aaron Wagner

1
อัพเดทคำตอบแล้ว :)
Stephen Harris

switch_theme ดูเหมือนจะไม่ทำงานอีกต่อไป ฉันคิดว่าเป็นเพราะการเปลี่ยนแปลงในการเปิดใช้งาน 3.4 อย่างน้อยมันก็ไม่ได้ผลสำหรับฉัน
Jake

after_switch_theme ทำงานได้อย่างสมบูรณ์แบบ นี่ควรเป็นคำตอบที่ยอมรับได้ ฉันใช้ WP 3.5
Ardee Aram

0

ทางออกที่ดีอาจจะมีการใช้สคริปต์เปิดใช้งานปลั๊กอินโทมัสกริฟฟิ สิ่งนี้จะแจ้งให้ผู้ใช้ติดตั้งปลั๊กอินที่คุณเลือกเมื่อใช้งานธีม ฉันคิดว่านี่เป็นวิธีที่ดีในการแยกปลั๊กอินออกจากชุดรูปแบบและยังคงใช้ประโยชน์จากมัน

ภายในชุดรูปแบบของคุณตรวจสอบว่าปลั๊กอินมีการใช้งานก่อนที่จะใช้ฟังก์ชั่นหรือไม่ สิ่งนี้จะช่วยให้ผู้ใช้มีทางเลือกและการควบคุมมากขึ้น

คุณสามารถตั้งค่าเปิดใช้งานสคริปต์ได้อย่างง่ายดายด้วยเป้


3
คำตอบที่ควรจะเป็นมากกว่าเพียงแค่การเชื่อมโยงไปยังเว็บไซต์ภายนอก กรุณาเพิ่มวิธีการแก้ปัญหา
fuxia

0

การแก้ไขที่ดีที่สุดของคุณคือการใช้switch_themehook และกรองอาร์กิวเมนต์ '$ theme' ที่ผ่านเพื่อดูว่าเป็นค่าปัจจุบันหรือไม่หากไม่ส่งคืน

function nw_update_network($theme) {
   if ($theme !== 'my_theme_name') return;

   // Your code here
}

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