ฉันควรใช้อะไรแทน WP_CONTENT_DIR และ WP_PLUGIN_DIR


15

เอกสาร WordPress สำหรับการกำหนดปลั๊กอินและไดเรกทอรีเนื้อหาระบุว่า:

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

มันจะไปในรายการWP_CONTENT_DIRและWP_PLUGIN_DIRในหมู่ค่าคงที่นักพัฒนาชุดรูปแบบและปลั๊กอินไม่ควรใช้สันนิษฐานว่าเป็นเพราะนี้:

WordPress อนุญาตให้ผู้ใช้วางไดเร็กทอรี wp-content ได้ทุกที่ที่ต้องการดังนั้นคุณต้องไม่สมมติว่าปลั๊กอินจะอยู่ใน wp-content / plugins หรือการอัปโหลดนั้นจะอยู่ใน wp-content / upload หรือธีมนั้นจะอยู่ใน wp- content / themes

Mark Jaquith ยังแสดงความคิดเห็นที่นี่ด้วยว่าไม่ควรใช้ค่าคงที่เหล่านี้:

อย่าใช้ WP_PLUGIN_URL หรือ WP_PLUGIN_DIR - ปลั๊กอินอาจไม่อยู่ในไดเรกทอรีปลั๊กอิน

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

เป็นตัวอย่างง่ายๆในการแสดงเส้นทางแบบเต็มของปลั๊กอินที่ติดตั้งทั้งหมดฉันสามารถทำสิ่งนี้:

<?php
$plugins = get_plugins();

foreach ($plugins as $file => $details) {
    echo WP_PLUGIN_DIR . '/' . $file . '<br>';
}

ซึ่งสร้างรายการดังนี้:

/var/www/wp-content/plugins/akismet/akismet.php
/var/www/wp-content/plugins/debug-bar/debug-bar.php
/var/www/wp-content/plugins/hello.php

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

หากใช้WP_PLUGIN_DIRไม่ถูกต้องตัวเลือกที่แนะนำคืออะไร ไม่มีสิ่งใดเทียบเท่าwp_upload_dir()สำหรับปลั๊กอินธีมและโฟลเดอร์ wp-content ที่ฉันสามารถค้นหาได้ซึ่งทำให้การอ้างอิงถึงธีมที่อาจหลงทางและไดเรกทอรีรูทปลั๊กอินที่เป็นปัญหา


ลองดูที่บทความ Codex กำหนดปลั๊กอินและนามเนื้อหา
Charles Clarkson

2
@CharlesClarkson ฉันอ้างอิงถึงหน้านั้นในประโยคแรกของคำถามของฉัน มันบอกว่าจะไม่ใช้ค่าคงที่ข้างต้น แต่ไม่แนะนำทางเลือกให้กับสิ่งต่าง ๆ เช่นWP_PLUGIN_DIRดังนั้นคำถามของฉันที่นี่
นิค

คำตอบ:


17

ไฟล์อ้างอิงในเส้นทางปัจจุบันหรือซ้อนกันลึก

เพื่ออ้างอิงเส้นทางปัจจุบัน

plugin_dir_path( __FILE__ )."further/nesting/here.css";

ซึ่งผลงานในปลั๊กอินและธีม

การอ้างอิง URl / URi ในปลั๊กอิน

หากต้องการชี้ไปที่ปลั๊กอินหรือไฟล์ธีมให้ใช้

plugins_url( "path/to/file", __FILE__ );

ซึ่งใช้งานได้เฉพาะในปลั๊กอิน

การอ้างอิง URl / URi ในwp-adminโฟลเดอร์

ชี้ไปที่admin_url( 'some/path' );เสมอ ก็มีget_admin_url()เช่นกัน

การอ้างอิง URl / Uri ในwp-includesโฟลเดอร์

ชี้ไปที่ includes_url( 'some/path' );

URl / URi ที่สัมพันธ์กับหน้าแรกของเว็บไซต์

มีhome_url( 'etc' );หรือget_home_url()ว่า ที่คล้ายกันคือและget_site_url() จากนั้นก็มีเช่นกันsite_url() network_home_url()และคุณได้รับnetwork_admin_url()

wp-content หรือไดเรกทอรีที่ถูกเปลี่ยนชื่อ

คุณสามารถกำหนดwp-contentชื่อโฟลเดอร์ได้อีกครั้ง ดังนั้นคุณใช้ที่content_url()นั่น

วิธีรับ URL โฟลเดอร์ปลั๊กอิน

หากใช้ WP_PLUGIN_DIR ผิดตัวเลือกที่แนะนำคืออะไร

เพียงใช้plugins_url()โดยไม่มีพารามิเตอร์ใด ๆ

หากคุณใช้สำหรับปลั๊กอินมันจะทำงานกับปลั๊กอิน MU ด้วย

แก้ไข # 1plugin_basename();หากคุณกำลังสนใจในเส้นทางไปยังปลั๊กอินปัจจุบันการใช้งาน

แก้ไข # 2หากคุณกำลังสนใจในการใช้งานปลั๊กอินทั้งหมด sidewide wp_get_active_network_plugins();ใช้

หากคุณไม่ได้อยู่ใน MultiSite wp_get_active_and_valid_plugins();การไปกับ สิ่งนี้จะคำนึงถึงหลายไซต์ / เครือข่าย โปรดจำไว้ว่าสิ่งนี้จะคำนึงถึงพวกเขาหากคุณไม่อยู่ในไซต์หลายไซต์ แต่ได้รับsunrise.phpDropin

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


อ่านเพิ่มเติม

รายการนี้ไปเรื่อย ๆ ลองดูที่ผลการค้นหาบนQueryPosts.comสำหรับข้อมูลเพิ่มเติม

นี้บทความไปในเชิงลึกที่แน่นอนเกี่ยวกับทุกเส้นทาง


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

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

@Nick ดูการอัปเดต
ไกเซอร์

บทความที่ "ไปในเชิงลึกเกี่ยวกับปลั๊กอินทั้งหมด" จะไม่สามารถใช้ได้อีกต่อไป WP_PLUGIN_DIRและฉันยังคงไม่สามารถเข้าใจวิธีการที่จะได้รับเส้นทางสัมบูรณ์ไปยังไดเรกทอรีปลั๊กอินโดยไม่ต้องใช้
XedinUnknown

4
  1. สิ่งนี้จะคืนค่าเส้นทางเซิร์ฟเวอร์ของไดเรกทอรีปลั๊กอินปัจจุบัน:

    plugin_dir_path(__FILE__)
    
    // example: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/

    Ref: https://codex.wordpress.org/Function_Reference/plugin_dir_path

    เพื่อไม่ให้สับสนกับ:

    plugins_dir_path(__FILE__)

    (Notice พหูพจน์ "ปลั๊กอินs " ในนั้น)

  2. เนื่องจากคุณไม่ต้องการให้ชื่อไดเรกทอรีปลั๊กอินคืนเราจึงต้องตัดออก นี่คือฟังก์ชั่นที่คืนไดเรกทอรีปลั๊กอินและชื่อไฟล์:

    plugin_basename(__FILE__)
    
    // example: exampleplugin/exampleplugin.php
  3. แต่แน่นอนว่าเราไม่ต้องการชื่อไฟล์ของปลั๊กอินด้วยดังนั้นเราจะต้องตัดไฟล์นั้นเสียplugin_basename(__FILE__)ก่อน วิธีคืนชื่อไฟล์ของปลั๊กอิน:

    basename(__FILE__)
    
    // example: exampleplugin.php
  4. ดังนั้นเพื่อใช้สิ่งเหล่านี้เพื่อสร้างพา ธ ไปยังไดเรกทอรีปลั๊กอินเราสามารถใช้str_replace()ฟังก์ชันดังนี้:

    $myBnm = basename(__FILE__); // value: exampleplugin.php
    $myDir = plugin_basename(__FILE__); // value: exampleplugin/exampleplugin.php
    $myStr = str_replace($myBnm,"",$myDir); // value: exampleplugin/
    $myPth = plugin_dir_path(__FILE__); // value: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/
    return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/
  5. และหากจำเป็นต้องกำหนดบรรทัดสุดท้ายที่แน่นอนให้กับตัวแปรสำหรับการใช้ซ้ำ

    แทน:

    return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/

    ใช้สิ่งที่ชอบ:

    $thePlgDir = str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/

    และต่อมาเมื่อจำเป็น:

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