La documentación de WordPress para la determinación de plugins y directorios de contenido establece que:
WordPress hace uso de las siguientes constantes al determinar la ruta al contenido y a los directorios de complementos. Estos no deben ser utilizados directamente por complementos o temas , pero se enumeran aquí para completar.
Continúa enumerando WP_CONTENT_DIR
y WP_PLUGIN_DIR
entre las constantes que los desarrolladores de temas y complementos no deberían usar, presumiblemente debido a esto:
WordPress permite a los usuarios colocar su directorio de contenido de wp donde quieran, por lo que nunca debe suponer que los complementos estarán en wp-content / plugins, o que las cargas estarán en wp-content / uploads, o que los temas estarán en wp- contenido / temas.
Mark Jaquith también comenta aquí que esas constantes no deben usarse:
No use WP_PLUGIN_URL o WP_PLUGIN_DIR; es posible que los complementos no estén en el directorio de complementos.
Entonces, ¿cuál es la forma aceptada de hacer referencia a la ruta completa a los complementos, wp-content y carpetas de temas sin usar estas constantes?
Como un simple ejemplo, para generar la ruta completa de todos los complementos instalados, puedo hacer esto:
<?php
$plugins = get_plugins();
foreach ($plugins as $file => $details) {
echo WP_PLUGIN_DIR . '/' . $file . '<br>';
}
Lo que produce una lista como esta:
/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
(Es posible que desee hacer esto si estaba escribiendo un complemento para permitir al usuario archivar selectivamente complementos como parte de una copia de seguridad del sitio, por ejemplo).
Si el uso WP_PLUGIN_DIR
es incorrecto, ¿cuál es la alternativa sugerida? No hay un equivalente wp_upload_dir()
para los complementos, los temas y la carpeta wp-content que puedo encontrar, lo que hace que la referencia a los directorios raíz de plugins y temas potencialmente errantes sea problemática.
WP_PLUGIN_DIR
, de ahí mi pregunta aquí.Respuestas:
Archivo de referencia en ruta actual o anidada más profunda
Para hacer referencia a la ruta actual
que funciona en complementos y temas .
Referencia URl / URi en un complemento
Para apuntar a un complemento o archivo de tema, use
que funciona solo en complementos
Referencia URl / URi en la
wp-admin
carpetaSiempre apúntelos
admin_url( 'some/path' );
. Hayget_admin_url()
tambiénReferencia URl / Uri en la
wp-includes
carpetaSeñalarlos a
includes_url( 'some/path' );
Un URl / URi relativo a los sitios de origen
Hay
home_url( 'etc' );
oget_home_url()
para eso. Similar esget_site_url()
ysite_url()
. Entonces allí también estánetwork_home_url()
. Y tienesnetwork_admin_url()
wp-content
o el directorio renombradoPuede redefinir el
wp-content
nombre de la carpeta. Por eso lo usascontent_url()
allí.¿Cómo obtener la URL de la carpeta de complementos?
Simplemente use
plugins_url()
sin ningún parámetro.Si lo usa para un complemento, también funciona para complementos MU.
EDITAR # 1 Si está interesado en la ruta al complemento actual, use
plugin_basename();
.EDITAR # 2 Si está interesado en todos los complementos activos laterales, use
wp_get_active_network_plugins();
.Si no estás en un sitio múltiple, ve con
wp_get_active_and_valid_plugins();
. Esto tendrá en cuenta multisitio / red. Tenga en cuenta que esto los tendrá en cuenta si no está en un sitiosunrise.php
múltiple , pero tiene un dropin.También podría recuperarlos a través de
get_option( 'active_plugins' );
, lo que no se recomienda ya que no tiene en cuenta los filtros y la validación de complementos, lo que sucede en varias ocasiones.Otras lecturas
Esta lista sigue y sigue. Eche un vistazo a los resultados de búsqueda en QueryPosts.com para obtener más información.
Este artículo va en profundidad absoluta sobre todos los caminos.
fuente
plugins_url()
devuelve la URL a la carpeta de complementos, no la ruta completa al directorio en el servidor. ¿Existen funciones similares para el manejo de directorios que desconozco? ¿O es el consejo de no usar laWP_PLUGIN_DIR
constante simplemente mal?WP_PLUGIN_DIR
.Esto devuelve la ruta del servidor del directorio del complemento actual:
Ref: https://codex.wordpress.org/Function_Reference/plugin_dir_path
No debe confundirse con:
(Observe el plural "plugin s " en eso).
Como no desea que se devuelva el nombre del directorio de complementos, tenemos que eliminarlo. Aquí hay una función que devuelve el directorio del complemento y el nombre del archivo:
Pero, por supuesto, tampoco queremos el nombre de archivo del complemento, por lo que tendremos que eliminarlo
plugin_basename(__FILE__)
primero. Para devolver el nombre del archivo del complemento:Entonces, para usarlos para construir una ruta al directorio de complementos , podemos usar la
str_replace()
función de la siguiente manera:Y si es necesario, esa línea final, por supuesto, se puede asignar a una variable, para su uso repetido.
En lugar de:
Use algo como:
Y luego, cuando sea necesario:
fuente