Ce ar trebui să folosesc în loc de WP_CONTENT_DIR și WP_PLUGIN_DIR?

16 oct. 2013, 15:10:44
Vizualizări: 19K
Voturi: 23

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ă.

3
Comentarii

Consultă articolul din Codex Determinarea directorilor pentru plugin-uri și conținut.

Charles Clarkson Charles Clarkson
16 oct. 2013 21:10:05

@CharlesClarkson Menționez acea pagină în prima propoziție a întrebării mele. Se spune să nu folosești constantele menționate, dar nu sugerează o alternativă la lucruri precum WP_PLUGIN_DIR, de aceea am pus întrebarea aici.

Nick Nick
16 oct. 2013 22:58:27
Toate răspunsurile la întrebare 2
4
23

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.

16 oct. 2013 17:49:14
Comentarii

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?

Nick Nick
16 oct. 2013 17:58:15

(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.)

Nick Nick
16 oct. 2013 18:00:13

@Nick Vezi actualizarea.

kaiser kaiser
16 oct. 2013 18:09:06

Articolul care „merge în profunzime absolută despre toate plugin-urile” nu mai este disponibil. Și încă nu pot înțelege cum să obțin calea absolută către directorul plugin-urilor fără a utiliza WP_PLUGIN_DIR.

XedinUnknown XedinUnknown
18 apr. 2019 14:34:01
0
  1. 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ă.)

  2. 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
    
  3. 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
    
  4. 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/
    
  5. Ș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;
    
24 iun. 2015 06:20:30