Cosa dovrei usare al posto di WP_CONTENT_DIR e WP_PLUGIN_DIR?


15

La documentazione di WordPress per determinare le directory dei plug-in e dei contenuti afferma che:

WordPress utilizza le seguenti costanti per determinare il percorso delle directory dei contenuti e dei plug-in. Questi non dovrebbero essere usati direttamente da plugin o temi , ma sono elencati qui per completezza.

Continua a elencare WP_CONTENT_DIRe WP_PLUGIN_DIRtra le costanti che gli sviluppatori di temi e plugin non dovrebbero usare, presumibilmente per questo:

WordPress consente agli utenti di posizionare la loro directory di contenuto wp dove vogliono, quindi non si deve mai presumere che i plugin saranno in contenuto / plugin wp, o che i caricamenti saranno in contenuto / caricamenti wp, o che i temi saranno in wp- content / themes.

Mark Jaquith commenta anche qui che tali costanti non dovrebbero essere usate:

Non utilizzare WP_PLUGIN_URL o WP_PLUGIN_DIR - i plug-in potrebbero non essere nella directory dei plug-in.

Quindi, qual è il modo accettato di fare riferimento al percorso completo delle cartelle plugin, contenuto wp e temi senza usare queste costanti?

Come semplice esempio, per ottenere il percorso completo di tutti i plugin installati, posso fare questo:

<?php
$plugins = get_plugins();

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

Che produce un elenco come questo:

/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

(Potrei voler fare questo se stavo scrivendo un plugin per consentire all'utente di archiviare selettivamente i plugin come parte di un backup del sito, ad esempio.)

Se l'utilizzo WP_PLUGIN_DIRè errato, qual è l'alternativa suggerita? Non esiste un equivalente wp_upload_dir()per i plug-in, i temi e la cartella wp-content che trovo, il che rende problematico il riferimento ai temi potenzialmente erranti e alle directory principali dei plug-in.


Dai un'occhiata all'articolo del Codex che determina le directory dei plug-in e dei contenuti .
Charles Clarkson,

2
@CharlesClarkson Mi riferisco a quella pagina nella prima frase della mia domanda. Dice di non usare le costanti di cui sopra, ma non suggerisce un'alternativa a cose come WP_PLUGIN_DIR, quindi la mia domanda qui.
Nick,

Risposte:


17

File di riferimento nel percorso corrente o nidificato più in profondità

Per fare riferimento al percorso corrente

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

che funziona in plugin e temi .

Riferimento URl / URi in un plugin

Per indicare un plug-in o un file di temi, utilizzare

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

che funziona solo nei plugin

Riferimento URl / URi nella wp-admincartella

Puntali sempre a admin_url( 'some/path' );. C'è get_admin_url()anche.

Riferimento URl / Uri nella wp-includescartella

Puntali a includes_url( 'some/path' );

Un URl / URi relativo ai siti di casa

C'è home_url( 'etc' );o get_home_url()per quello. Simile è get_site_url()e site_url(). Poi c'è anche network_home_url(). E tu hainetwork_admin_url()

wp-content o la directory rinominata

È possibile ridefinire il wp-contentnome della cartella. Quindi usi content_url()lì.

Come ottenere l'URL della cartella dei plugin?

Se l'utilizzo di WP_PLUGIN_DIR è errato, qual è l'alternativa suggerita?

Basta usare plugins_url()senza parametri.

Se lo usi per un plugin, funziona anche per i plugin MU.

EDIT # 1 Se sei interessato al percorso del plugin corrente, usa plugin_basename();.

EDIT # 2 Se sei interessato a tutti i plug-in attivi laterali, usa wp_get_active_network_plugins();.

Se non sei su più siti, vai con wp_get_active_and_valid_plugins();. Ciò terrà conto di più siti / reti. Tieni presente che questo li terrà in considerazione se non sei su più siti, ma hai un sunrise.phpdrop-in.

Si potrebbe così recuperarli via get_option( 'active_plugins' );, che è non è raccomandato in quanto non prende filtri e plugin di convalida in considerazione, che avviene in diverse occasioni.


Ulteriori letture

Questo elenco potrebbe continuare all'infinito. Dai un'occhiata ai risultati della ricerca su QueryPosts.com per maggiori informazioni.

Questo articolo approfondisce in modo assoluto tutti i percorsi.


3
Grazie per questo, ma la tua risposta sembra riguardare gli URL piuttosto che i percorsi assoluti del server, che è quello che mi interessava. Ad esempio, plugins_url()restituisce l'URL nella cartella dei plug-in, non il percorso completo della directory sul server. Esistono funzioni simili per la gestione delle directory di cui non sono a conoscenza? O il consiglio di non usare la WP_PLUGIN_DIRcostante è semplicemente sbagliato?
Nick,

(Sono specificamente interessato a trovare il percorso completo per i plug-in installati diversi dal plug-in che contiene il mio codice, nel caso ciò mi aiuti a spiegare.)
Nick,

@Nick Vedi aggiornamento.
Kaiser

L'articolo che "approfondisce in modo assoluto tutti i plugin" non è più disponibile. E non riesco ancora a capire come ottenere il percorso assoluto della directory dei plugin senza usare WP_PLUGIN_DIR.
XedinSconosciuta il

4
  1. Questo restituisce il percorso del server della directory del plugin corrente:

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

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

    Da non confondere con:

    plugins_dir_path(__FILE__)

    (Notare il "plugin s " plurale su questo.)

  2. Poiché non si desidera che venga restituito il nome della directory del plug-in, è necessario eliminarlo. Ecco una funzione che restituisce la directory del plugin e il nome del file:

    plugin_basename(__FILE__)
    
    // example: exampleplugin/exampleplugin.php
  3. Ma ovviamente non vogliamo nemmeno il nome del file del plugin, quindi dovremo plugin_basename(__FILE__)prima eliminarlo . Per restituire il nome del file del plug-in:

    basename(__FILE__)
    
    // example: exampleplugin.php
  4. Quindi per usarli per costruire un percorso per il directory dei plugin , possiamo usare la str_replace()funzione in questo modo:

    $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. E se necessario, quella linea finale può ovviamente essere assegnata a una variabile, per un uso ripetuto.

    Invece di:

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

    Usa qualcosa come:

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

    E più tardi, quando necessario:

    return $thePlgDir;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.