2012-03-14 12 views
6

के अंदर PHP निरंतर मुझे एक समस्या का सामना करना पड़ रहा है जिसे मैं समझ नहीं पा रहा हूं।जेएस फ़ाइल

प्लगइन विकास के दौरान मैं एक file.js.php (रजिस्टर/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.. " 

तो मेरे परीक्षण मुझे पता चला है कि जादू स्थिरांक काम करते हैं, लेकिन किसी भी WP लगातार उपलब्ध नहीं होगा।

मेरी खुद स्थिरांक कि plugin.php (वास्तव में यह कारण है कि मैं भी WP स्थिरांक का परीक्षण शुरू किया)

काफी दिलचस्प में घोषित किया गया शामिल हैं यही कारण है कि - न केवल स्थिरांक उपलब्ध नहीं हैं - लेकिन किसी भी WP समारोह "अनुपलब्ध" लौट रहा है।

PHP निरंतर ऐप के माध्यम से हर समय उपलब्ध होना है .. क्या यह एक WP विशिष्ट समस्या है? क्या यह जानबूझकर है? या मुझ से कुछ गलत हो रहा है ?

नोट: मुझे पता है कि यह (localize_script का उपयोग कर जे एस के लिए चर पारित करने के लिए तरह - या सिर्फ शीर्षक में पथ उत्पादन के लिए एक समारोह का उपयोग करें) - ऐसा करने के लिए अन्य तरीके हैं, लेकिन पहले - उन तरीकों नहीं आदर्श हो जाएगा

Althouh @Matt बैकमैन सही दिशा में इशारा किया उसकी विशिष्ट विधि काम नहीं किया: - मेरे लिए और अधिक महत्वपूर्ण तथ्य यह है कि मुझे समझ में क्यों इस विधि में नाकाम रहने के है चाहते हैं ...

संपादित मैं है । यह सच है कि WP से एक फ़ाइल शामिल की जानी चाहिए। मुझे दोनों निम्नलिखित काम के लिए:

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

आप के रूप में दोनों की कल्पना कर सकते बराबर हैं - लेकिन समस्या बनी हुई है: उन कुछ हद तक हार्डकोडेड कर रहे हैं (@Salman एक) की तरह का सुझाव दिया है - क्या हुआ अगर plugin's dir परिवर्तन ?? उस मामले में समाधान क्या है?

ध्यान दें कि wp-load.php और wp-config.php दोनों मेरे लिए काम करते हैं। मुझे नहीं पता कि क्या बेहतर है या जो कुछ सुरक्षा मुद्दों को पेश कर सकता है।

लेकिन मैं इसे एक और सवाल के लिए है लगता है ..

निष्कर्ष: किसी भी इस समाधान केवल अस्थायी जब तक मैं सही जवाब मिल जाएगा है। मेरी प्लगइन वर्डप्रेस प्लगइन मैकेनिम (enqueue_script()/register_script()/init() आदि .. के माध्यम से लोड हो रही है) - और इसलिए मैं समझ नहीं पा रहा हूं कि ऐसा क्यों करता है .. अभी के लिए Bu यह ऊपर वर्णित की तरह काम करता है।

+1

मत आप के लिए 'की जरूरत है इससे पहले कि आप अपने ऐप में वर्डप्रेस फ़ंक्शंस/स्थिरांक का संदर्भ दे सकें, इससे पहले 'या' कुछ आवश्यक फाइलें 'की आवश्यकता है? –

+0

अच्छा सवाल .. बिल्कुल मैं क्या जानना चाहता हूं। और यदि हां - कौन सा ?? –

+0

इससे आपकी मदद मिलेगी। - http://codeblow.com/questions/php-within-js-file-wordpress/ - http://stackoverflow.com/questions/6260902/how-to-pass-variable-from-php-template-to- जावास्क्रिप्ट - http://stackoverflow.com/questions/6401297/php-constants-in-a-javascript-file - http://stackoverflow.com/questions/6808221/php-within-js-file-wordpress – Milap

उत्तर

4

ऐसा होने के कारण यह जावास्क्रिप्ट की तरह शामिल किया जा रहा है, आपके file.js.php को उन स्थिरांकों तक पहुंचने के लिए वर्डप्रेस लाइब्रेरी का संदर्भ देने की आवश्यकता है। वर्तमान में, जैसा कि आपका कोड खड़ा है, इसमें उन स्थिरांक का कोई संदर्भ नहीं है।

__FILE__ को वर्डप्रेस से कुछ भी एक्सेस करने की आवश्यकता नहीं है, यही कारण है कि यह अपेक्षा के अनुसार काम करता है।

आप कुछ require या include विशिष्ट Wordpress पीएचपी संदर्भित बयान शामिल करने की आवश्यकता होगी आप file.js.php के शीर्ष पर जरूरत फ़ाइलें।

संपादित

उपयोग आपकी file.js.php फ़ाइल के शीर्ष पर निम्न उन स्थिरांक तक पहुँच प्राप्त करने:

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

Source

+0

यह है प्रश्न से खुद को समझ लिया :-)। असली सवाल क्यों है, और इसे कैसे काम करना है। मुझे किसी विशेष चीज़ को संदर्भित करने का वास्तविक कारण नहीं दिख रहा है - यह था कि जेएस को BY wp - और wp फ़ंक्शंस के भीतर से कहा जाता है। क्या आप शायद इस समस्या को विस्तारित कर सकते हैं कि वास्तव में क्या समस्या है और इसे कैसे हल किया जाए? –

+1

आप एक जावास्क्रिप्ट फ़ाइल को कॉल कर रहे हैं जो PHP द्वारा बनाया गया है। हालांकि, कॉल सीधे आपके ब्राउज़र से उस फ़ाइल पर आ रही है, और यह * PHP * पाइपलाइन से नहीं आ रहा है। इन प्रकार की PHP- निर्मित जावास्क्रिप्ट फ़ाइलों का उपयोग करते समय, आपको PHP फ़ाइल में सभी आवश्यक फ़ाइलों का संदर्भ देना होगा। –

+0

उदाहरण: यदि आप अपने ब्राउज़र में http://www.example.com/file.js.php पर ब्राउज़ करते हैं, तो यह कभी भी वर्डप्रेस को तब तक स्पर्श नहीं करेगा जब तक कि आप इसे स्पष्ट रूप से * बताएं ('शामिल' या 'आवश्यकता' का उपयोग करके) । अन्य वर्डप्रेस प्लगइन्स 'index.php' के माध्यम से शामिल हैं, और जैसा कि पहले से ही सभी आवश्यक संदर्भ हैं। –

संबंधित मुद्दे