Cosa usare al posto di WP_CONTENT_DIR e WP_PLUGIN_DIR?

16 ott 2013, 15:10:44
Visualizzazioni: 19K
Voti: 23

La documentazione di WordPress per Determinare le directory dei plugin e dei contenuti afferma che:

WordPress utilizza le seguenti costanti per determinare il percorso delle directory dei contenuti e dei plugin. Queste non dovrebbero essere utilizzate direttamente da plugin o temi, ma sono elencate qui per completezza.

Prosegue elencando WP_CONTENT_DIR e WP_PLUGIN_DIR tra le costanti che gli sviluppatori di temi e plugin non dovrebbero usare, presumibilmente per questo motivo:

WordPress consente agli utenti di posizionare la loro directory wp-content dove preferiscono, quindi non devi mai presupporre che i plugin siano in wp-content/plugins, che i caricamenti siano in wp-content/uploads o che i temi siano in wp-content/themes.

Mark Jaquith commenta anche qui che quelle costanti non dovrebbero essere utilizzate:

Non usare WP_PLUGIN_URL o WP_PLUGIN_DIR — i plugin potrebbero non essere nella directory dei plugin.

Quindi, qual è il modo accettato per riferirsi al percorso completo delle cartelle dei plugin, wp-content e temi senza usare queste costanti?

Come esempio semplice, per mostrare 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 una lista come questa:

/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 stessi scrivendo un plugin per permettere all'utente di archiviare selettivamente i plugin come parte di un backup del sito, ad esempio.)

Se usare WP_PLUGIN_DIR è sbagliato, qual è l'alternativa suggerita? Non c'è un equivalente a wp_upload_dir() per le cartelle dei plugin, dei temi e di wp-content che io abbia trovato, il che rende problematico riferirsi alle directory radice potenzialmente variabili dei temi e dei plugin.

3
Commenti

Dai un'occhiata all'articolo del Codex Determinare le directory dei plugin e dei contenuti.

Charles Clarkson Charles Clarkson
16 ott 2013 21:10:05

@CharlesClarkson Faccio riferimento a quella pagina nella prima frase della mia domanda. Dice di non usare le costanti sopra indicate, ma non suggerisce un'alternativa a cose come WP_PLUGIN_DIR, da qui la mia domanda qui.

Nick Nick
16 ott 2013 22:58:27
Tutte le risposte alla domanda 2
4
23

Riferimento a file nel percorso corrente o annidato più in profondità

Per riferirsi al percorso corrente

plugin_dir_path( __FILE__ )."ulteriore/annidamento/qui.css";

che funziona in Plugin e Temi.

Riferimento a URL/URI in un plugin

Per puntare a un file di un plugin o tema, usa

plugins_url( "percorso/al/file", __FILE__ );

che funziona solo nei plugin

Riferimento a URL/URI nella cartella wp-admin

Puntali sempre a admin_url( 'qualche/percorso' );. Esiste anche get_admin_url().

Riferimento a URL/URI nella cartella wp-includes

Puntali a includes_url( 'qualche/percorso' );

Un URL/URI relativo alla home del sito

Per questo c'è home_url( 'ecc' ); o get_home_url(). Simili sono get_site_url() e site_url(). Poi c'è anche network_home_url(). E hai network_admin_url()

wp-content o la directory rinominata

Puoi ridefinire il nome della cartella wp-content. Per questo usi content_url().

Come ottenere l'URL della cartella dei plugin?

Se usare WP_PLUGIN_DIR è sbagliato, qual è l'alternativa suggerita?

Basta usare plugins_url() senza alcun parametro.

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

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

MODIFICA #2 Se sei interessato a tutti i plugin attivi a livello di sito, usa wp_get_active_network_plugins();.

Se non sei in multisite, usa wp_get_active_and_valid_plugins();. Questo terrà conto di multisite/rete. Tieni presente che questo li prenderà in considerazione se non sei in multisite, ma hai un dropin sunrise.php.

Potresti anche recuperarli tramite get_option( 'active_plugins' );, che non è raccomandato in quanto non tiene conto dei filtri e della validazione del plugin, che avviene in diverse occasioni.


Ulteriori letture

Questa lista continua all'infinito. Dai un'occhiata ai risultati di ricerca su QueryPosts.com per maggiori informazioni.

Questo articolo entra in profondità assoluta su tutti i percorsi.

16 ott 2013 17:49:14
Commenti

Grazie per la risposta, ma sembra che tu abbia parlato di URL piuttosto che di percorsi assoluti sul server, che è ciò che mi interessava. Ad esempio, plugins_url() restituisce l'URL della cartella dei plugin, non il percorso completo della directory sul server. Esistono funzioni simili per gestire le directory che non conosco? O il consiglio di non usare la costante WP_PLUGIN_DIR è semplicemente sbagliato?

Nick Nick
16 ott 2013 17:58:15

(Sono particolarmente interessato a trovare il percorso completo dei plugin installati diversi dal plugin che contiene il mio codice, nel caso questo aiuti a spiegare meglio.)

Nick Nick
16 ott 2013 18:00:13

@Nick Vedi aggiornamento.

kaiser kaiser
16 ott 2013 18:09:06

L'articolo che "entra in profondità assoluta su tutti i plugin" non è più disponibile. E ancora non riesco a capire come ottenere il percorso assoluto alla directory dei plugin senza usare WP_PLUGIN_DIR.

XedinUnknown XedinUnknown
18 apr 2019 14:34:01
0
  1. Questo restituisce il percorso del server della directory del plugin corrente:

    plugin_dir_path(__FILE__)
    
    // esempio: /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 plurale "plugins" in questo caso.)

  2. Poiché non vogliamo che venga restituito il nome della directory del plugin, dobbiamo rimuoverlo. Ecco una funzione che restituisce la directory del plugin e il nome del file:

    plugin_basename(__FILE__)
    
    // esempio: exampleplugin/exampleplugin.php
    
  3. Ma naturalmente non vogliamo nemmeno il nome del file del plugin, quindi dovremo prima rimuoverlo da plugin_basename(__FILE__). Per restituire il nome del file del plugin:

    basename(__FILE__)
    
    // esempio: exampleplugin.php
    
  4. Quindi, per utilizzare queste funzioni per costruire un percorso alla directory dei plugin, possiamo usare la funzione str_replace() in questo modo:

    $myBnm = basename(__FILE__); // valore: exampleplugin.php
    $myDir = plugin_basename(__FILE__); // valore: exampleplugin/exampleplugin.php
    $myStr = str_replace($myBnm,"",$myDir); // valore: exampleplugin/
    $myPth = plugin_dir_path(__FILE__); // valore: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/
    return str_replace($myStr,"",$myPth); // restituisce: /home/myserver/public_html/wordpress_install/wp-content/plugins/
    
  5. E se necessario, l'ultima riga può ovviamente essere assegnata a una variabile, per un uso ripetuto.

    Invece di:

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

    Usare qualcosa come:

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

    E successivamente, quando necessario:

    return $thePlgDir;
    
24 giu 2015 06:20:30