Ce ar trebui să folosesc în loc de WP_CONTENT_DIR și WP_PLUGIN_DIR?
Documentația WordPress pentru Determinarea directorilor pentru plugin-uri și conținut menționează următoarele:
WordPress utilizează următoarele constante pentru a determina calea către directoarele de conținut și plugin-uri. Acestea nu ar trebui utilizate direct de plugin-uri sau teme, dar sunt enumerate aici pentru completitudine.
Lista include constante precum WP_CONTENT_DIR
și WP_PLUGIN_DIR
, pe care dezvoltatorii de teme și plugin-uri nu ar trebui să le folosească, probabil din cauza următoarelor:
WordPress permite utilizatorilor să plaseze directorul wp-content oriunde doresc, așa că nu trebuie să presupui niciodată că plugin-urile vor fi în wp-content/plugins, încărcările în wp-content/uploads sau temele în wp-content/themes.
Mark Jaquith comentează și el aici că aceste constante nu ar trebui utilizate:
Nu folosi WP_PLUGIN_URL sau WP_PLUGIN_DIR — plugin-urile s-ar putea să nu fie în directorul plugins.
Deci, care este metoda acceptată pentru a referenția calea completă către folderele de plugin-uri, wp-content și teme fără a folosi aceste constante?
Ca exemplu simplu, pentru a afișa calea completă a tuturor plugin-urilor instalate, pot face asta:
<?php
$plugins = get_plugins();
foreach ($plugins as $file => $details) {
echo WP_PLUGIN_DIR . '/' . $file . '<br>';
}
Ceea ce produce o listă de genul:
/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
(Aș putea dori să fac asta dacă aș scrie un plugin care să permită utilizatorului să arhiveze selectiv plugin-urile ca parte a unei copii de rezervă a site-ului, de exemplu.)
Dacă folosirea WP_PLUGIN_DIR
este greșită, care este alternativa sugerată? Nu există un echivalent pentru wp_upload_dir()
pentru folderele de plugin-uri, teme și wp-content pe care să-l găsesc, ceea ce face referirea la directoarele rădăcină ale temelor și plugin-urilor potențial mobile o problemă.

Referențierea fișierelor în calea curentă sau în subdirectoare imbricate
Pentru a face referire la calea curentă
plugin_dir_path( __FILE__ )."further/nesting/here.css";
care funcționează în Plugin-uri și Teme.
Referențierea URL/URI într-un plugin
Pentru a indica un fișier dintr-un plugin sau temă, folosiți
plugins_url( "calea/către/fișier", __FILE__ );
care funcționează doar în plugin-uri
Referențierea URL/URI în folderul wp-admin
Întotdeauna indicați-le către admin_url( 'o/cale/oarecare' );
. Există și get_admin_url()
.
Referențierea URL/URI în folderul wp-includes
Indicați-le către includes_url( 'o/cale/oarecare' );
Un URL/URI relativ la pagina principală a site-ului
Există home_url( 'etc' );
sau get_home_url()
pentru asta. Similar sunt get_site_url()
și site_url()
. Apoi mai există și network_home_url()
. Și aveți și network_admin_url()
wp-content
sau directorul redenumit
Puteți redefini numele folderului wp-content
. Prin urmare, folosiți content_url()
acolo.
Cum să obțineți URL-ul folderului de plugin-uri?
Dacă utilizarea WP_PLUGIN_DIR este greșită, care este alternativa sugerată?
Pur și simplu folosiți plugins_url()
fără niciun parametru.
Dacă îl utilizați pentru un plugin, funcționează și pentru plugin-urile MU.
EDIT #1 Dacă sunteți interesat de calea către plugin-ul curent, utilizați plugin_basename();
.
EDIT #2 Dacă sunteți interesat de toate plugin-urile active la nivel de site, utilizați wp_get_active_network_plugins();
.
Dacă nu sunteți pe un multisite, mergeți cu wp_get_active_and_valid_plugins();
. Acesta va ține cont de multisite/rețea. Rețineți că acest lucru va lua în considerare dacă nu sunteți pe un multisite, dar aveți un dropin sunrise.php
.
Puteți de asemenea să le recuperați prin get_option( 'active_plugins' );
, ceea ce nu este recomandat deoarece nu ține cont de filtre și validarea plugin-urilor, care au loc în mai multe ocazii.
Lectură suplimentară
Această listă continuă la nesfârșit. Aruncați o privire la rezultatele căutării pe QueryPosts.com pentru mai multe informații.
Acest articol merge în profunditate absolută despre toate căile.

Mulțumesc pentru asta, dar răspunsul tău pare să se ocupe de URL-uri mai degrabă decât de căile absolute ale serverului, ceea ce mă interesa pe mine. De exemplu, plugins_url()
returnează URL-ul către folderul de plugin-uri, nu calea completă către directorul pe server. Există funcții similare pentru manipularea directoarelor pe care nu le cunosc? Sau sfatul de a nu folosi constanta WP_PLUGIN_DIR
este pur și simplu greșit?

(Mă interesează în mod special să găsesc calea completă către plugin-urile instalate, altele decât plugin-ul care conține propriul meu cod, în caz că asta ajută la explicație.)

Aceasta returnează calea serverului pentru directorul curent al pluginului:
plugin_dir_path(__FILE__) // exemplu: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/
Referință: https://codex.wordpress.org/Function_Reference/plugin_dir_path
Nu trebuie confundat cu:
plugins_dir_path(__FILE__)
(Observați pluralul "plugins" în această variantă.)
Deoarece nu doriți ca numele directorului pluginului să fie returnat, trebuie să-l eliminăm. Iată o funcție care returnează directorul pluginului și numele fișierului:
plugin_basename(__FILE__) // exemplu: exampleplugin/exampleplugin.php
Dar desigur, nu vrem nici numele fișierului pluginului, așa că va trebui să-l eliminăm din
plugin_basename(__FILE__)
mai întâi. Pentru a returna numele fișierului pluginului:basename(__FILE__) // exemplu: exampleplugin.php
Deci, pentru a folosi acestea pentru a construi o cale către directorul plugins, putem utiliza funcția
str_replace()
în felul următor:$myBnm = basename(__FILE__); // valoare: exampleplugin.php $myDir = plugin_basename(__FILE__); // valoare: exampleplugin/exampleplugin.php $myStr = str_replace($myBnm,"",$myDir); // valoare: exampleplugin/ $myPth = plugin_dir_path(__FILE__); // valoare: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/ return str_replace($myStr,"",$myPth); // returnează: /home/myserver/public_html/wordpress_install/wp-content/plugins/
Și dacă este necesar, acea linie finală poate fi atribuită unei variabile, pentru utilizare repetată.
În loc de:
return str_replace($myStr,"",$myPth); // returnează: /home/myserver/public_html/wordpress_install/wp-content/plugins/
Utilizați ceva de genul:
$thePlgDir = str_replace($myStr,"",$myPth); // returnează: /home/myserver/public_html/wordpress_install/wp-content/plugins/
Și mai târziu, când este necesar:
return $thePlgDir;
