Ver Mensaje Individual
  #20 (permalink)  
Antiguo 09/08/2009, 03:09
Avatar de metacortex
metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 11 meses
Puntos: 832
Respuesta: [solucionado] Problema con fwrite

Grande okram!!! Qué solución!!

Sí, anoche precisamente me preguntaba acerca de la necesidad del bucle, ya que todo era cuestión de entrar, revisar/comparar una línea específica y escribir lo que había en la variable. Es decir, Sólo que los ejemplos que encontré incluían algún tipo de bucle y desistí por embotamiento.

Este giro que le diste al asunto es sencillamente increíble. También quedó vigente el FILE_IGNORE_NEW_LINES de David (ahora más que esencial para el script) y la condicional de abimaelrc (variada) para impedir la escritura constante. Ahora sí estoy más feliz que Julie Andrews en la colina.

Explicando de qué viene esto:

A manera de información, lo que se ha hecho aquí viene resolviendo un importante problema relacionado a la activación automática de funciones de Wordpress a cualquier tipo de archivos, un proceso que hasta ahora se venía haciendo de forma estática, en especial por parte de los desarrolladores de plugins y plantillas.

Específicamente requiero de este código para aplicar funciones Ajax en mi plugin, lo cual involucra un archivo externo que debe tener activadas las funciones nativas de Wordpress; para ello es necesario hacer -desde éste- un require_once a cierto archivo del sistema (wp-load.php, ubicado en la raiz del sitio) o de lo contrario devolvería error de función indefinida.

El asunto radica en que Wordpress sólo reconoce como "suyo" a un archivo del directorio del plugin: el principal -que se declara mediante una cabecera especial- y activa todas sus funciones sólo a éste, pero "abandona" a los demás. Hasta ahora la forma que se usaba para traer el conjunto de funciones nativas era:

Código PHP:
require_once(../../wp-load.php
Esto resultaba muy bien hasta cierta versión de Wordpress, a partir de la cual fue posible mover el directorio /wp-content/ a cualquier ubicación... Pero junto a esta nueva característica surgieron algunos reveses, entre ellos precisamente que muchas configuraciones estáticas (entre ellas las rutas) se iban al diablo, siendo necesario reescribirlas manualmente.

Entonces me pregunté por qué no hacer que el mismo WP escriba automáticamente esa línea en otros archivos desde el archivo principal (el que Wordpress sí reconoce) y comencé a buscar documentación hasta completar el código inicial, que terminó funcionando, pero tenía el problemita de la reescritura constante, lo cual aún lo hacía inviable porque los plugins no sólo son consultados en el backend sino cada vez que una web es visitada.

El desarrollo (y sus culpables ) quedaron debidamente documentados en el presente tópico. Y con este último tubazo fulminante de okram finalmente obtuvimos un código optimizado y usable que cumple con su función cabalmente, el cual sin duda alguna será parte esencial para todo plugin de Wordpress desde ahora, eso gracias a ustedes compadres.

El código terminado: (Para usarlo debe modificarse los nombres de los archivos)

Código PHP:
if ( !defined('WP_PLUGIN_DIR') ) $plugin_dir str_replaceABSPATH''dirname(__FILE__) );
else 
$plugin_dir dirnameplugin_basename(__FILE__) );
$texto 'require_once(\''ABSPATH 'wp-load.php\');';
$texto_error '';
$archivo ABSPATH '/' PLUGINDIR '/' $plugin_dir .'/wpsi-data.php';
$conteo 1;
$leer file($archivoFILE_IGNORE_NEW_LINES);

if( isset(
$leer[$conteo]) and $texto != trim($leer[$conteo]) ) {
  
$leer[$conteo] = $texto;
  if (
is_writable($archivo)) {
    
$nueva_linea implode"\n" $leer );
    
$abrir fopen$archivo 'w' );
    
fwrite$abrir $nueva_linea strlen($nueva_linea) );
    
fclose($abrir);
  } else {
    
$texto_error .='
    <div id="message" class="updated fade">
      <p>'
.__('WP Smart Image can\'t write your file. Please open your "wpsi-data.php" file located in /wp-smart-image/ directory and paste the following string into the second line of that file:''wp-smart-image').':</p>
      <pre>'
.$archivo.'</pre>
    </div>'
;
  }

Qué es lo que hace el script (o eso espero):

- Imprime la ruta absoluta completa al archivo wp-load.php (el que activa las funciones de Wordpress en archivos estáticos) independientemente del lugar donde se encuentre el directorio del plugin. Si posteriormente la carpeta es movida, el script localizará automáticamente al archivo.

- Si el archivo a modificar no es escribible, el script lanzará una advertencia en el panel de que es necesario incluir el código, proporcionando la ruta correcta del mismo en una etiqueta <pre>.

- Si el código está correctamente en su lugar, el anuncio no saldrá (aunque el archivo no sea escribible).

Última edición por metacortex; 09/08/2009 a las 15:27