Me enfrenta a un problema que no puedo entender.Constante de PHP dentro del archivo JS
Durante el desarrollo de un plugin estoy incluyendo file.js.php (register/enqueue).
<?
/*
File.js.php
*/
Header("content-type: application/javascript");
$path = constant('WP_PLUGIN_DIR'); //test with function
$path_2 = WP_PLUGIN_DIR; // test directly
//can cause a problem with older browsers?? use text/javascript
?>
//////////////////// Begin Tests ////////////
var templateDir = "<?php echo WP_PLUGIN_URL ?>" ;
var templateDir2 = "<?php echo $path ?>" ;
var templateDir3 = "<?php echo $path_2 ?>" ;
var templateDir4 = "<?php echo constant("WP_PLUGIN_URL") ?>";
var templateDir5 = "<?php echo __FILE__ ?>";
var templateDir6 = "<?php echo plugins_url('somedir/somefile.png' , dirname(__FILE__)) ?>";
Resultados:
var templateDir = "WP_PLUGIN_URL" ; // simply outputs a string of the constant name
var templateDir2 = "" ; // null or empty
var templateDir3 = "WP_PLUGIN_DIR" ;// simply outputs a string of the constant name
var templateDir4 = "//Warning: constant() Couldn't find constant WP_PLUGIN_URL in .."
var templateDir5 = "path.to.js.php" // only one that works ;
var templateDir6 = "Call to undefined function plugins_url() in.. "
así que mis pruebas me mostraron que las constantes MAGIC funcionan, pero cualquier constante WP no estarán disponibles.
que incluye MIS PROPIOS constantes que fueron declarados en el plugin.php (de hecho esta es la razón por la que incluso comenzó a probar las constantes WP)
lo suficientemente interesante - no únicas constantes no están disponibles - pero cualquier función wp está regresando "no disponible".
PHP constante están destinados a estar disponibles en todo momento a través de la aplicación .. ¿Es eso un problema específico de WP? Es eso intencional? o estoy haciendo algo mal?
NOTA: Sé que hay otras maneras de hacerlo (como el uso de localize_script para pasar variables a JS - o simplemente utilizar una función de salida de la ruta en la cabeza) - pero primero - esos métodos no va a ser ideal para mí - y lo más importante es el hecho de que yo quiero entender por qué este método es no ...
EDIT:
althouh @ Matt Beckman señaló en la dirección correcta su método específico no funcionó . Es cierto que se debe incluir un archivo de WP. para mí, tanto los siguientes trabajos:
include("../../../../wp-load.php");
require_once (dirname(dirname(dirname(dirname(dirname (__FILE__))))).'/wp-load.php');
Tanto como se puede imaginar son iguales - pero el problema sigue siendo: los que están codificados en cierta medida (como @Salman A) sugirió - ¿Y si los cambios plugin's dir ?? ¿Cuál es la solución en ese caso?
Tenga en cuenta que tanto el wp-load.php
como el wp-config.php
funcionaron para mí. No sé qué es mejor o cuáles pueden presentar algunos problemas de seguridad.
pero supongo que es para otra pregunta ..
En pocas palabras: esta solución sólo es TEMP hasta que voy a encontrar la respuesta correcta. Mi complemento se carga a través del complemento WORDPRESS mechanisem (enqueue_script()/register_script()/init() etc.) - y por eso no puedo comprender por qué lo hace ... Bu, por ahora funciona como se describe arriba.
¿Usted no necesita a ' include' o 'require' algunos archivos antes de que pueda hacer referencia a las funciones/constantes de wordpress en su aplicación? –
buena pregunta ... exactamente lo que me gustaría saber. Y si es así, cuáles ?? –
esto te ayudará. - http://codeblow.com/questions/php-within-js-file-wordpress/ - http://stackoverflow.com/questions/6260902/how-to-pass-variable-from-php-template-to- javascript - http://stackoverflow.com/questions/6401297/php-constants-in-a-javascript-file - http://stackoverflow.com/questions/6808221/php-within-js-file-wordpress – Milap