Escribir en un archivo desde mi complemento de WordPress

2 minutos de lectura

Escribí un complemento personalizado para mi sitio de WordPress que se basa en la lectura/escritura de un archivo de datos xml dentro de la carpeta del complemento. Cuando pruebo este código PHP estándar para leer/escribir archivos, me permitirá crear/escribir archivos ubicados en el nivel wp-admin/, pero no archivos dentro de la carpeta del complemento, aunque puede leer desde ambos.

$file="test.xml";  (Can write to this file)
$file = plugins_url()."/my-plugin/test.xml";  (Can read but not write to this file)
// Open the file to get existing content
$current = file_get_contents($file);
echo $current;
// Append a new person to the file
$current .= "<person>John Smith</person>\n";
// Write the contents back to the file
file_put_contents($file, $current);

Recibo el siguiente error de depuración:

Advertencia: file_put_contents (http://localhost/wp_mysite/wp-content/plugins/my-plugin/test.xml)
[function.file-put-contents]: error al abrir la transmisión: el envoltorio HTTP no admite conexiones grabables en /Applications/MAMP/htdocs/wp_mysite/wp-content/plugins/my-plugin/my-plugin.php en la línea 53

Actualmente estoy ejecutando esto desde un servidor MAMP local, pero quiero una solución que me permita empaquetar y publicar el complemento en cualquier servidor de WordPress. ¿Cuál es el enfoque correcto?

Gracias-

No acceda a él a través de HTTP si desea escribir en el archivo. Acceda a él directamente tanto para leer como para escribir, ya que es mucho más rápido y el método más directo para acceder a un archivo.

Para obtener la ruta del directorio del complemento base, use el WP_PLUGIN_DIR constante:

$file="test.xml";  // (Can write to this file)
$file = WP_PLUGIN_DIR."/my-plugin/test.xml"; 
//      ^^^^^^^^^^^^^

Esto le impedirá hacer uso de HTTP, que no debería usarse en absoluto por motivos de rendimiento y porque HTTP no admite la escritura. Pero sobre todo, como es un archivo en el servidor al que tiene acceso, acceda a él directamente.

  • @hakre, ¿alguna idea de si existe algo similar para los temas? algo como WP_THEME_DIR >

    – Blowsie

    10 de marzo de 2013 a las 13:20

  • @Blowsie: No, no es tan CONSTANTE sino algo similar. Vea aquí el “panorama general”: codex.wordpress.org/Determining_Plugin_and_Content_Directories

    – hakré

    10 de marzo de 2013 a las 13:34

¿Ha sido útil esta solución?