ปิดใช้งานการกระทำของปลั๊กอิน / ปลั๊กอินผ่านชุดรูปแบบ


19

ฉันติดตั้งปลั๊กอิน Google Analyticatorบนเว็บไซต์ของฉันแล้ว ฉันยังใช้ปลั๊กอิน MobilePressเพื่อแสดงธีมที่ออกแบบมาสำหรับเบราว์เซอร์มือถือที่ไม่ใช่สมาร์ทโฟน ฉันได้ตั้งค่าGoogle Analytics สำหรับมือถือเพื่อใช้ในชุดรูปแบบนี้และต้องการปิดใช้งานปลั๊กอิน Analyticator เนื่องจากมีการเรียกไปยังไฟล์ js ที่มีขนาดใหญ่ขึ้น

ไม่มีใครรู้ว่ามันเป็นไปได้ที่จะปิดการใช้งานปลั๊กอินโดยใช้ functions.php หรือวิธีการอื่น ๆ ?

ฉันเชื่อว่าฉันพบรหัสที่เพิ่มฟังก์ชั่นในหน้าดังนั้นหากมันเป็นไปไม่ได้ที่จะปิดการใช้งานปลั๊กอินทั้งหมดเป็นไปได้หรือไม่ที่จะหยุดการกระทำสำหรับการดำเนินการ? ฉันได้ลองปิดการใช้งานโดยตรงโดยไม่มีโชค นี่คือรหัสจากไฟล์ปลั๊กอิน:

add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');

ฉันพยายามลบการกระทำเหล่านั้นด้วย:

remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');

ความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก


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

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

ฉันสับสนเล็กน้อย - ไม่ง่ายกว่าที่จะปิดใช้งานปลั๊กอินด้วยวิธีปกติหรือไม่ถ้ามันต้องหายดี? คำตอบของ EAMann ใดที่ทำด้วยรหัสเท่านั้น ผมถือว่าคุณอยากให้มันพิการแบบไดนามิกบนเงื่อนไขบางอย่าง ...
Rarst

ฉันมีชุดรูปแบบปกติซึ่งตั้งค่าเป็น wordpress สำหรับเบราว์เซอร์เดสก์ท็อปทั่วไป สำหรับชุดรูปแบบนี้ฉันต้องการใช้ปลั๊กอิน GA ปลั๊กอิน mobilepress ใช้ php เพื่อรับสตริงตัวแทนผู้ใช้และทำหน้าที่เป็นธีมที่แตกต่างกันทั้งในสมาร์ทโฟนและที่ไม่ใช่สมาร์ทโฟน ฉันต้องการใช้ไฟล์ functions.php สำหรับชุดรูปแบบที่ไม่ใช่สมาร์ทโฟนเพื่อปิดใช้งานปลั๊กอิน GA จากการวาง JS ใน <head> สำหรับชุดรูปแบบนั้นเท่านั้น ยังคงต้องเปิดใช้งานสำหรับอีกสองธีม (เดสก์ท็อปและสมาร์ทโฟน) มันช่วยอธิบายได้ไหม?
PNMG

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

คำตอบ:


25

เมื่อ WordPress เปิดใช้งานปลั๊กอินมันจะเรียกใช้activate_plugin()ฟังก์ชัน ฟังก์ชั่นนี้เปิดใช้งานปลั๊กอินในแซนด์บ็อกซ์และเปลี่ยนเส้นทางไปที่อื่นเพื่อความสำเร็จ มันถูกใช้โดยผู้เขียนไม่กี่คนเพื่อเปิดใช้งานการอ้างอิงปลั๊กอิน

มีอีกฟังก์ชั่นหนึ่งdeactivate_plugin()ที่ทำสิ่งเดียวกันในทางกลับกัน ... เป็นวิธีที่ WordPress ปิดการใช้งานปลั๊กอินเมื่อคุณคลิกที่ "ปิดใช้งาน" หรือ "ปิดการใช้งาน"

หากต้องการปิดใช้งานปลั๊กอินที่ติดตั้งเพียงโทร:

deactivate_plugins( '/plugin-folder/plugin-name.php' );

หรือปิดใช้งานปลั๊กอินหลายรายการพร้อมกัน:

deactivate_plugins( array( '/first-plugin/first.php', '/second-plugin/second.php' ) );

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

deactivate_plugins( '/plugin-folder/plugin-name.php', true );

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


คำตอบที่ยอดเยี่ยม - และไม่เพียง แต่เมื่อเปรียบเทียบกับคำตอบอื่น ๆ สมมติว่าคำตอบ "นี่เป็นเว็บไซต์" ที่น่าเบื่อซึ่งอาจอยู่ใกล้ ๆ
บรรณาธิการ

รหัสนี้วางอยู่ใน function.php จะปิดการใช้งานปลั๊กอินในผู้ดูแลระบบจึงปิดการใช้งานจากสองรูปแบบอื่น ๆ ขอบคุณ Rarst สำหรับจุดที่ออก ฉันต้องการเพียงแค่ปิดการใช้งานสำหรับธีมเดียวที่มีไฟล์ Functions.php อยู่
PNMG

คุณเคยใช้เพียงหนึ่งชุดรูปแบบในแต่ละครั้งบนไซต์ที่กำหนด ... แต่ถ้าคุณต้องการเปิดใช้งานปลั๊กอินอีกครั้งหลังจากปิดใช้งานชุดรูปแบบนั่นก็เป็นไปได้เช่นกัน
EAMann

11

นี่คือคำตอบที่ยอดเยี่ยมของ EAMann และฉันคิดว่ามันอาจมีประโยชน์กับโปสเตอร์ต้นฉบับด้วย ...

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

function deactivate_plugin_conditional() {
    if ( is_plugin_active('plugin-folder/plugin-name.php') ) {
    deactivate_plugins('plugin-folder/plugin-name.php');    
    }
}
add_action( 'admin_init', 'deactivate_plugin_conditional' );

หมายเหตุ: ดูเหมือนว่าจะไม่ทำงานบน register_activation_hook แต่ admin_init ใช้งานได้อย่างมีเสน่ห์


1
เพียงเพื่อทราบผมค่อนข้างมั่นใจว่า is_plugin_active มีการตรวจสอบแล้วในเบ็ด deactivate_plugins ดังนั้นจึงไม่ควรต้องทำมันอีกครั้ง
ไบรอันวิลลิส

1

นี่คือทางออกของฉันสร้างปลั๊กอินที่สามารถปิดการใช้งานปลั๊กอินอื่น ๆ เช่น:

/*
 * Plugin Name: Disable/Configure Plugins
 * Description: Lets you disable/configure plugins based on environment variables
 * Author:      Chris Sewell
 */

/**
 * Disable specified plugins in development environment.
 * 
 * This is a "Must-Use" plugin. Code here is loaded automatically before regular plugins load.
 * This is the only place from which regular plugins can be disabled programatically.
 * 
 * Place this code in a file in WP_CONTENT_DIR/mu-plugins or specify a custom location 

 * to "development" or "production" in each particular server/environment.
 */

/* Disable specified plugins in development environment */
if (((getenv('environment') == 'production') || (getenv('environment') == 'alpha')) == false) {
    $plugins = array(
        'w3-total-cache/w3-total-cache.php'
    );
    require_once(ABSPATH . 'wp-admin/includes/plugin.php');
    deactivate_plugins($plugins);
}

ผลักดันสิ่งนี้สู่การผลิตเปิดใช้งานจากนั้นนำฐานข้อมูลลงไปยังเครื่อง dev ในพื้นที่ของคุณ

แหล่ง

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