Apa yang harus saya gunakan daripada WP_CONTENT_DIR dan WP_PLUGIN_DIR?

15

Dokumentasi WordPress untuk Menentukan Plugin dan Direktori Konten menyatakan bahwa:

WordPress menggunakan konstanta berikut ketika menentukan jalur ke direktori konten dan plugin. Ini tidak boleh digunakan secara langsung oleh plugin atau tema , tetapi terdaftar di sini untuk kelengkapan.

Selanjutnya ke daftar WP_CONTENT_DIRdan di WP_PLUGIN_DIRantara konstanta bahwa pengembang tema dan plugin tidak boleh menggunakan, mungkin karena ini:

WordPress memungkinkan pengguna untuk menempatkan direktori konten-wp di mana pun mereka inginkan, jadi Anda tidak boleh berasumsi bahwa plugin akan berada di konten-wp / plugin, atau bahwa unggahan akan berada di konten-wp / unggahan, atau bahwa tema akan ada di wp- konten / tema.

Mark Jaquith juga berkomentar di sini bahwa konstanta itu tidak boleh digunakan:

Jangan gunakan WP_PLUGIN_URL atau WP_PLUGIN_DIR - plugin mungkin tidak ada di direktori plugins.

Jadi, apa cara yang diterima untuk merujuk path lengkap ke folder plugins, konten-wp, dan tema tanpa menggunakan konstanta ini?

Sebagai contoh sederhana, untuk menampilkan path lengkap dari semua plugin yang diinstal, saya dapat melakukan ini:

<?php
$plugins = get_plugins();

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

Yang menghasilkan daftar seperti ini:

/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

(Saya mungkin ingin melakukan ini jika saya sedang menulis sebuah plugin untuk memungkinkan pengguna untuk secara selektif mengarsipkan plugin sebagai bagian dari cadangan situs, misalnya.)

Jika menggunakan WP_PLUGIN_DIRsalah, apa alternatif yang disarankan? Tidak ada yang setara dengan wp_upload_dir()untuk plugin, tema, dan folder konten-wp yang dapat saya temukan, yang membuat referensi tema yang berpotensi berkelana dan direktori root plugin bermasalah.

Nick
sumber
Lihatlah artikel Codex Menentukan Plugin dan Direktori Konten .
Charles Clarkson
2
@CharlesClarkson Saya merujuk halaman itu dalam kalimat pertama dari pertanyaan saya. Ia mengatakan untuk tidak menggunakan konstanta di atas, tetapi tidak menyarankan alternatif untuk hal-hal seperti WP_PLUGIN_DIR, maka pertanyaan saya di sini.
Nick

Jawaban:

17

File referensi di jalur saat ini atau bersarang lebih dalam

Untuk referensi jalur saat ini

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

yang berfungsi di Plugin dan Tema .

Referensi URl / URi dalam sebuah plugin

Untuk menunjuk ke file plugin atau tema, gunakan

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

yang hanya berfungsi di plugin

Referensi URl / URi dalam wp-adminfolder

Selalu arahkan mereka ke admin_url( 'some/path' );. Ada get_admin_url()juga.

Referensi URl / Uri dalam wp-includesfolder

Arahkan mereka ke includes_url( 'some/path' );

URl / URi relatif terhadap situs beranda

Ada home_url( 'etc' );atau get_home_url()untuk itu. Mirip get_site_url()dan site_url(). Lalu ada juga network_home_url(). Dan kamu punyanetwork_admin_url()

wp-content atau direktori berganti nama

Anda dapat mendefinisikan kembali wp-contentnama folder. Oleh karena itu Anda gunakan di content_url()sana.

Bagaimana cara mendapatkan url folder plugins?

Jika menggunakan WP_PLUGIN_DIR salah, apa alternatif yang disarankan?

Cukup gunakan plugins_url()tanpa parameter apa pun.

Jika Anda menggunakannya untuk sebuah plugin, itu berfungsi untuk plugin MU juga.

EDIT # 1 Jika Anda tertarik pada jalur ke plugin saat ini, gunakan plugin_basename();.

EDIT # 2 Jika Anda tertarik dengan semua plugin aktif di samping, gunakan wp_get_active_network_plugins();.

Jika Anda tidak menggunakan multisite, ikuti wp_get_active_and_valid_plugins();. Ini akan mempertimbangkan multisite / jaringan. Perlu diingat bahwa ini akan memperhitungkan mereka jika Anda tidak menggunakan multisite, tetapi mendapat sunrise.phpdropin.

Anda juga dapat mengambilnya melalui get_option( 'active_plugins' );, yang tidak disarankan karena tidak mempertimbangkan filter dan validasi plugin, yang terjadi pada beberapa kesempatan.


Bacaan lebih lanjut

Daftar ini terus berlanjut. Lihatlah hasil pencarian di QueryPosts.com untuk info lebih lanjut.

Artikel ini membahas secara mendalam tentang semua jalur.

kaisar
sumber
3
Terima kasih untuk ini, tetapi jawaban Anda tampaknya berkaitan dengan URL daripada jalur server absolut, yang merupakan hal yang saya minati. Misalnya, plugins_url()mengembalikan URL ke folder plugin, bukan path lengkap ke direktori di server. Apakah ada fungsi serupa untuk menangani direktori yang tidak saya sadari? Atau apakah saran untuk tidak menggunakan WP_PLUGIN_DIRkonstanta itu salah?
Nick
(Saya secara khusus tertarik untuk menemukan path lengkap ke plugin yang diinstal selain dari plugin yang berisi kode saya sendiri, kalau-kalau ada yang membantu menjelaskannya.)
Nick
@Nick See update.
kaiser
Artikel yang "membahas sepenuhnya tentang semua plugin" tidak lagi tersedia. Dan saya masih tidak mengerti bagaimana cara mendapatkan path absolut ke direktori plugins tanpa menggunakan WP_PLUGIN_DIR.
XedinTidak Diketahui
4
  1. Ini mengembalikan jalur server direktori plugin saat ini:

    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

    Jangan bingung dengan:

    plugins_dir_path(__FILE__)

    (Perhatikan "plugin s " jamak itu.)

  2. Karena Anda tidak ingin nama direktori plugin dikembalikan, kami harus menghapusnya. Inilah fungsi yang mengembalikan direktori plugin dan nama file:

    plugin_basename(__FILE__)
    
    // example: exampleplugin/exampleplugin.php
  3. Tapi tentu saja kami juga tidak ingin nama file plugin, jadi kami harus menghapusnya plugin_basename(__FILE__)terlebih dahulu. Untuk mengembalikan nama file plugin:

    basename(__FILE__)
    
    // example: exampleplugin.php
  4. Jadi untuk menggunakan ini untuk membangun jalur ke direktori plugin , kita dapat menggunakan str_replace()fungsi seperti ini:

    $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. Dan jika diperlukan, baris terakhir itu tentu saja dapat ditugaskan ke variabel, untuk digunakan berulang.

    Dari pada:

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

    Gunakan sesuatu seperti:

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

    Dan kemudian, saat dibutuhkan:

    return $thePlgDir;
Joe Rhoney
sumber