簡體   English   中英

JS文件中的PHP常量

[英]PHP constant inside JS file

我遇到了一個我無法理解的問題。

在插件開發期間,我包含了一個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__)) ?>";

結果:

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.. "

所以我的測試向我展示了MAGIC CONSTANTS的工作原理,但任何WP常數都不可用。

這包括在plugin.php中聲明的MY OWN常量(實際上這就是我開始測試WP常量的原因)

有趣的是 - 不僅CONSTANTS不可用 - 但任何wp函數都返回“不可用”。

PHP常量應該始終通過應用程序提供..這是WP特定的問題嗎? 這是故意的嗎? 或者我做錯了什么?

注意:我知道還有其他方法可以做到這一點(比如使用localize_script將變量傳遞給JS - 或者只是使用函數來輸出標題中的路徑) - 但首先 - 這些方法對我來說並不理想 - 更重要的是事實上,我想了解為什么這種方法失敗...

編輯I:

Althouh @Matt Beckman指出了正確的方向,他的具體方法不起作用。 確實必須包含來自WP的文件。 對我來說,以下工作:

include("../../../../wp-load.php");
require_once (dirname(dirname(dirname(dirname(dirname ( __FILE__))))).'/wp-load.php');

你可以想象兩者都是平等的 - 但問題仍然存在:那些有點硬編碼(如@Salman A)建議 - 如果插件的目錄發生變化怎么辦? 在那種情況下解決方案是什么?

請注意, wp-load.phpwp-config.php適用於我。 我不知道什么是更好或哪些可以提出一些安全問題。

但我想這是另一個問題..

一句話:這個解決方案只是TEMP,直到我找到正確的答案。 我的插件是通過WORDPRESS插件mechanisem(enqueue_script()/ register_script()/ init()等來加載的。) - 因此我無法理解它為什么這樣做..現在它的工作原理如上所述。

由於它被包含在JavaScript中,因此您的file.js.php需要引用Wordpress庫才能訪問這些常量。 目前,正如您的代碼所代表的那樣,它沒有對這些常量的任何引用。

__FILE__不需要從Wordpress訪問任何內容,這就是它按預期工作的原因。

您需要在file.js.php的頂部包含一些引用所需的特定Wordpress PHP文件的requireinclude語句。

編輯

使用file.js.php文件頂部的以下內容來訪問這些常量:

$home_dir = preg_replace('^wp-content/plugins/[a-z0-9\-/]+^', '', getcwd());
include($home_dir . 'wp-load.php');

資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM