ฉันจะหาทากของปลั๊กอินได้อย่างไร


11

ฉันสงสัยว่าฉันจะหาตัวบุ้งของปลั๊กอินได้อย่างไร (slug = ชื่อภายในที่ใช้โดย WordPress เพื่อทำการอัปเดตปลั๊กอินและเพื่อพิจารณาว่าปลั๊กอินตัวใดที่ใช้งานอยู่ในปัจจุบัน) โดยปกติจะเป็นชื่อโฟลเดอร์ของปลั๊กอิน แต่หากปลั๊กอินไม่มีโฟลเดอร์ก็จะเป็นชื่อไฟล์ (เช่น hello.php) มีข้อยกเว้นอื่น ๆ อีกไหม?

  1. อักขระตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำคัญหรือไม่
  2. ปลั๊กอินสามารถมีกระสุนแตกต่างจากชื่อโฟลเดอร์หรือไม่? จะเกิดอะไรขึ้นถ้ามีปลั๊กอินชื่อ hello.php และ /hello.php/hello.php อีกอัน?

เป็นคำถามที่ดีมากน่าเสียดายที่เราไม่สามารถมอบรางวัลให้กับ Q's ได้ แต่ฉันเดาว่า A คือรางวัล;)
brasofilo

คำตอบ:


8

สตริงที่ใช้ใน WordPress เพื่อระบุปลั๊กอินคือ:

plugin_basename($file);

... ที่$fileเป็นไฟล์ที่มีส่วนหัวปลั๊กอิน

ดังนั้นหากคุณอยู่ในปลั๊กอินให้รับกระสุนด้วย:

$slug = plugin_basename( __FILE__ );

1
plugin_basename ($ ไฟล์); ไม่ใช่บุ้งตั้งแต่ 3.8.1 นี่คือโฟลเดอร์ / plugin_main_file.php พา ธ ในฐานะที่เป็น "กระสุน" ของปลั๊กอิน Akismet ไม่ใช่ "akismet / akismet.php" แต่เป็น "akismet"
Jeff Mattson

3
นี่ไม่ใช่คำตอบที่ถูกต้องในทั้งสองกรณีอีกต่อไป
majick

@majick จริงสำหรับ Wordpress 4.7.4 มันไม่ได้เป็นคำตอบ
Marecky

2
dirname(plugin_basename(__FILE__))วิธีการสร้างกระสุนปลั๊กอินก็คือการใช้
ilanco

2

หากคุณติดตั้งWP-CLIคุณสามารถรับรายการปลั๊กอินด้วยตัวบุ้งและเวอร์ชันได้จากบรรทัดคำสั่ง:

> wp plugin list

ฉันรู้ว่านั่นอาจไม่ใช่สิ่งที่คุณต้องการถ้าคุณต้องการหากระสุนในโค้ด แต่มันช่วยฉันในขณะที่ทำงานกับปลั๊กอิน TGM-Plugin-Activation

ฉันพบว่ามันยากที่จะทำงานกับ WordPress โดยไม่มี WP-CLI โดยทั่วไปเป็นเครื่องมือที่มีประโยชน์มากสำหรับงานทั่วไปมากมายที่เกี่ยวข้องกับ WordPress


2

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

นี่คือสิ่งที่ฉันได้เรียนรู้จากการทำ "งานนักสืบ" บนโค้ดหลักของ WordPress

ไฟล์ปลั๊กอิน

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

มันจะมีลักษณะเช่นนี้: your-plugin-directory/main-file.php

หากคุณดูข้อมูลปลั๊กอินที่แอ็คทีฟ (คืนโดยget_option( 'active_plugins' )) คุณจะเห็นว่า WordPress ต้องการไฟล์ปลั๊กอินนี้เพื่อระบุปลั๊กอินอย่างถูกต้องเท่านั้น

คุณสามารถเลือกที่จะคิดว่ามันเป็นเส้นทางหลักของไฟล์ที่สัมพันธ์กับปลั๊กอินของคุณ (สัมพันธ์กับwp-content/plugins/ไดเรกทอรีที่เป็น) คุณสามารถ "เขียน" พา ธ สัมบูรณ์ของไฟล์ปลั๊กอินหลักด้วยสิ่งนี้:trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file

แกนตัวเองสร้างไฟล์ปลั๊กอินเช่นนี้:

$plugin_main_file = plugin_basename( trim( $plugin_main_file_absolute_path ) );

ตัวบุ้งปลั๊กอิน

ใคร ๆ ก็คาดหวังว่าปลั๊กอิน "กระสุน" จะเป็นรหัสมาตรฐานบางประเภทสำหรับปลั๊กอินเช่นเสากระสุนสำหรับโพสต์ - ดังนั้นคุณสามารถใช้ "กระสุน" นี้เพื่อมอบให้กับฟังก์ชั่นหลักของเวิร์ดเพรส

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

ทากจริงเท่านั้นที่สามารถเข้าถึงได้ผ่านทาง URL ที่ไม่ซ้ำกัน: โพสต์, หน้า, taxonomies ฯลฯ นั่นคือจุดรวมของการใช้ชื่อของบางสิ่ง (เช่นชื่อโพสต์) และสร้าง URL ที่ง่ายต่อการใช้ : ใน URL

แต่เราจะใช้ชุดรูปแบบ / ปลั๊กอิน "ทาก" ใน URL ได้อย่างไร

เราไม่ได้ทำเช่นนั้นในการติดตั้ง WordPress แต่ละตัว - ไม่ได้อยู่ใน WP admin หรือส่วนหน้า

อย่างไรก็ตามมีสถานที่ที่ยุ่งมากกับรหัส WordPress, เว็บไซต์ WordPress.org ผู้คนกำลังประสบความยากลำบากในการแยกความแตกต่างระหว่างสองอย่างรวมถึงมันเป็นเรื่องธรรมดาในหมู่นักพัฒนาในการพิจารณาธีม WordPress.org หรือตัวบุ้งปลั๊กอินควรทำงานเหมือนกับโพสต์หรือหน้ากระสุน

พวกเขาให้บริการวัตถุประสงค์เดียวกัน แต่ในเว็บไซต์แยกต่างหาก ใน WordPress.org พวกเขาจะใช้เพื่อระบุธีมจากผู้อื่นและปลั๊กอินจากส่วนที่เหลือ (ใน URL เช่นhttps://wordpress.org/plugins/akismet/ )

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

โค้ดเวิร์ดเพรสทำอะไรกับตัวบุ้งธีม / ปลั๊กอิน?

รหัสหลักของ WordPress ไม่ได้ขึ้นอยู่กับทากธีม / ปลั๊กอินเพื่อทำสิ่งต่าง ๆ เช่นการติดตั้งการเปิดใช้งานการอัพเดตการลบธีมหรือปลั๊กอิน

สำหรับธีมนั้นต้องอาศัยไดเร็กทอรีธีมเนื่องจากจุดเข้าหลักในธีมคือstyle.cssไฟล์ (คุณไม่สามารถใช้ไฟล์ CSS อื่นเพื่อเก็บส่วนหัวรายละเอียดธีมของคุณ)

สำหรับปลั๊กอินนั้นจะอาศัยไดเรกทอรีปลั๊กอินและไฟล์ปลั๊กอินหลักเนื่องจากปลั๊กอินสามารถเรียกไฟล์หลักได้ตามต้องการ

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


ในการสรุปข้อมูลเกี่ยวกับตัวบุ้งปลั๊กอิน:เมื่อใดก็ตามที่คุณพบข้อมูลปลั๊กอินที่มีslugรายการ 99% ของเวลาจะอ้างถึงตัวบุ้ง WordPress.org ของปลั๊กอิน

เราจะระบุปลั๊กอินอย่างไร?

หากคุณต้องการเปิดใช้งานอัปเดตปิดใช้งานหรือลบปลั๊กอินบางอย่างโดยทางโปรแกรมในการติดตั้ง WordPress คุณต้องใช้ไฟล์ปลั๊กอิน คุณสามารถทำให้เป็นแบบนี้ได้จากไฟล์หลักของปลั๊กอิน:

$plugin_file = plugin_basename( __FILE__ );

หากคุณต้องการกำหนดเป้าหมายปลั๊กอินบางตัวจากปลั๊กอินอื่นสิ่งต่าง ๆ จะยุ่งยากเล็กน้อยเนื่องจากคุณต้องพึ่งพา "การคาดเดา" สักเล็กน้อย

คุณสามารถเขียนโค้ดปลั๊กอินได้ยากค้นหาปลั๊กอินในรายการปลั๊กอินทั้งหมด (ดูที่get_plugins () ) และรับไฟล์ปลั๊กอินจากที่นั่น

หากคุณทราบคลาสหรือฟังก์ชันที่กำหนดโดยปลั๊กอินนั้นคุณสามารถใช้การสะท้อน (ดูคำตอบนี้สำหรับคลาสและคลาสนี้สำหรับฟังก์ชั่น)


ฉันหวังว่าสิ่งนี้จะช่วยคุณและผู้อื่นที่อาจมีปัญหาในการจัดการกับ "ปลั๊กอินกระสุน" มันอาจช่วยฉันสองสามชั่วโมง :)


0

เพียงชี้แจงให้ชัดเจนตั้งแต่โพสต์ต้นฉบับ

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

ตัวอย่างเช่นถ้าฉันพบโค้ดด้านล่างในไฟล์ชื่อ advanced-plugin-awesomeness.php กระสุนของฉันจะเป็น advanced-plugin-awesomeness

หวังว่านี่จะช่วยได้!

/*
Plugin Name: Name of plugin here
Version: 2.4.6
Description: plugin description here
Author: plugin author here

-1 ในขณะที่ชื่อไฟล์และไดเรกทอรีส่วนใหญ่ตรงกับวิธีนี้ไม่ใช่วิธีที่เชื่อถือได้เนื่องจากกระสุนอัพเดทเป็นจริงไดเรกทอรี - ไม่ใช่ชื่อไฟล์ (เว้นแต่จะไม่มีไดเรกทอรี)
majick

หรือแม้กระทั่งไดเรกทอรี! ดูคำตอบที่อัปเดตของฉันมันมาจากชื่อปลั๊กอินจริง ๆ
majick

0

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

print_r(get_site_transient('update_plugins'));

แต่นี่จะไม่มีข้อมูลเกี่ยวกับปลั๊กอินที่เพิ่งติดตั้งใหม่อีก 12 ชั่วโมงคุณจะต้องทำสิ่งที่แตกต่างสำหรับปลั๊กอินเหล่านั้นเช่น ใช้รหัสรุ่นที่แก้ไขจากwp_update_pluginsในwp-includes/update.php ...

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

// if you have the plugin basename:
// $pluginfile = WP_PLUGIN_DIR.'/'.$pluginbasename;

// otherwise if you have the absolute path already:
$plugin = get_plugin_data($pluginfile);
$pluginslug = sanitize_title($plugin['Name']);

+1 และหมายเหตุเพิ่มเติมคือสิ่งนี้อาจเปลี่ยนแปลงได้ตามเวลาที่ทำไว้โดยทีมงาน wordpress.org ว่าวิธีการคำนวณกระสุนยังไม่สิ้นสุดโดยสิ้นเชิง
Mark Kaplun

ฉันไม่แน่ใจว่าสิ่งนี้ถูกต้องหรือไม่ฉันพยายามที่จะทำเพื่อปลั๊กอิน แต่ล้มเหลว: ชื่อปลั๊กอินที่ส่งคืนคือ "Responsive WordPress Slider - Soliloquy Lite" และกระสุนคือ: soliloquy-lite
Chris

ฉันสงสัยว่านี่เป็นเพราะตัวบุ้งถูกสร้างขึ้นในเวลาที่มีการส่งปลั๊กอินไปยังที่เก็บและไม่เปลี่ยนด้วยชื่อในภายหลัง ... ในกรณีส่วนใหญ่มันจะตรงกับชื่อไดเรกทอรี แต่ถ้ามีข้อยกเว้นทั้งสองอย่าง เป็นหนึ่งหรืออื่น ๆ มันไม่เหมาะ: - /
majick

0

คุณสามารถรับชื่อโฟลเดอร์ของปลั๊กอิน (PHP5.3 +) โดยส่งDIRไปยัง plugin_basename () เช่น:

$plugin_foldername = plugin_basename( __DIR__ );

0

ลองสิ่งนี้:

function get_slugname(){
    $tmp = array();
    $plugins_all = get_plugins() ;
    $plugin_slug = explode('/',dirname(plugin_basename(__FILE__)));
    foreach ($plugins_all as $key=>$value) {
        if ($plugin_slug[0] == explode('/',$key)[0] ) {
        $tmp = $value;
        $tmp['slug'] = explode('/',$key)[0];
        $tmp['file'] = explode('/',$key)[1];
        }
    }
return $tmp;
}

1
โปรดแก้ไขคำตอบของคุณและเพิ่มคำอธิบายว่ารหัสนี้ทำอะไร
Nathan Johnson

0

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

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