2011-03-15 13 views
30

मैं WPDB का उपयोग करके वर्डप्रेस से कनेक्ट करने का प्रयास कर रहा हूं क्योंकि यह एक सुंदर वर्ग है और कॉन्फ़िगरेशन भी हैं जो wp-config.php में निर्दिष्ट हैं इसलिए मुझे इसे फिर से निर्दिष्ट करने की आवश्यकता नहीं होगी।स्टैंडअलोन स्क्रिप्ट में WPDB का उपयोग करना?

मैं पृष्ठभूमि में चलाने के लिए मुख्य वर्डप्रेस से एक छोटी से अलग लिपि लिखने जा रहा हूं जिसे इस WPDB इंस्टेंस का उपयोग करने की आवश्यकता होगी।

मैं इसे कैसे संग्रहीत कर सकता हूं?

किसी भी मदद की सराहना की जाती है।

उत्तर

40

सबसे अच्छा (सबसे तेज और सबसे सुरक्षित) तरीका केवल लोड वर्डप्रेस की मुख्य कार्यक्षमता लोड करने के लिए SHORTINIT झंडा इस तरह उपयोग करने के लिए है , कोड को /wp-settings.php में जांचना है।

// Stop most of WordPress from being loaded if we just want the basics. 
if (SHORTINIT) 
    return false; 

इसका मतलब यह है कि इस के बाद कुछ भी लोड नहीं किया जा जाएगा, और यह काफी के लिए बहुत कुछ है के रूप में आप देख सकते हैं: वहाँ आप निम्नलिखित खंड मिल जाएगा। पदचिह्न wp-load.php को लोड करने से बहुत छोटा होगा और फिर भी आपको वर्डप्रेस कोर में सभी अंतर्निहित कार्यों तक पहुंच प्रदान करता है, उदाहरण के लिए उदाहरण के लिए /wp-includes/wp-db.php। डब्ल्यूपी कोर में कई फ़ंक्शंस में अन्य फाइलों में निर्भरता भी होती है और यह पता लगाने के लिए एक गड़बड़ हो सकती है कि आप जो भी फाइलें चाहते हैं उसे करने में सक्षम होने के लिए आपको शामिल करने की आवश्यकता है। SHORTINIT में आवश्यक निर्भरता शामिल है ताकि आपको इसके बारे में चिंता न करें।

यदि आपको पता है कि आपको वास्तव में क्या चाहिए, उदाहरण के लिए केवल WPDB, सबसे तेज़ तरीका केवल उन फ़ाइलों को शामिल करना है, जिन्हें आप चाहते हैं, लेकिन SHORTINIT WP कोर और निर्भरताओं को लोड करने के लिए एक सुरक्षित और अधिक मानकीकृत तरीका प्रदान करता है। SHORTINIT वर्डप्रेस प्लगइन लोड नहीं करता है, प्लगइन एपीआई, थीम, थीम फ़ंक्शंस और अधिकांश व्यवस्थापक और फ्रंटएंड फ़ंक्शंस के अधिकांश भाग। यह वह जगह है जहां भारी कोड एक सामान्य वर्डप्रेस इंस्टॉल में है। ज्यादातर मामलों में मुझे लगता है कि SHORTINIT केवल उन फ़ाइलों को शामिल करने की तुलना में गति/प्रदर्शन में छोटे व्यापार के लायक है और यह ज्यादातर मामलों में पूर्ण लोड की तुलना में एक बड़ा प्रदर्शन बढ़ावा है।

+0

यह निश्चित रूप से सबसे अच्छा जवाब है! –

+0

कस्टम स्क्रिप्ट के लिए SHORTINIT का उपयोग करके अब तक का सबसे अच्छा जवाब बहुत तेज़ है। –

+0

धन्यवाद! मुझे ठीक इसी की आवश्यकता थी। wp-db.php को कुछ असाधारण WP फ़ंक्शंस की आवश्यकता होती है जो शामिल नहीं होते हैं और यह हल करता है। –

41
<?php 

$path = $_SERVER['DOCUMENT_ROOT']; 

include_once $path . '/wp-config.php'; 
include_once $path . '/wp-load.php'; 
include_once $path . '/wp-includes/wp-db.php'; 
include_once $path . '/wp-includes/pluggable.php'; 

// $wpdb is available, do stuff 
+20

'wp-load.php' पर्याप्त नहीं है? –

+2

हां, wp-load स्वयं ही पर्याप्त है, यह बाकी सभी को लोड करता है - दूसरे शब्दों में, यह सभी प्लगइन समेत सभी वर्डप्रेस लोड कर रहा है। –

16

वर्डप्रेस वास्तव में आप अपने खुद के डीबीए (डेटाबेस अमूर्त परत) सिर्फ एक फ़ाइल db.php बुलाया बनाने और अपने wp-content निर्देशिका की जड़ में सहेजकर उपयोग करने के लिए अनुमति देता है।

मुझे कक्षा के माध्यम से डेटाबेस तक पहुंचने की आवश्यकता की समस्या थी, जिसमें वर्डप्रेस के साथ कुछ भी नहीं था, लेकिन मैं इस स्क्रिप्ट के साथ पूरी तरह से नया डीबीए नहीं बनाना चाहता था।

क्योंकि डिफ़ॉल्ट WPDB आप कारखाने पैटर्न का उपयोग करने की अनुमति नहीं है, मैं जल्दी से इसे समर्थन करने के लिए कुछ पंक्तियां लिखी, और db.php में जोड़ा ...

<?php 

class DB extends wpdb 
{ 
    protected static $instance = null; 

    public static function getInstance() 
    { 
    if (!self::$instance) { 
     self::$instance = new DB(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST); 
    } 

    return self::$instance; 
    } 
} 

$wpdb = DB::getInstance(); 

अब जब से wpdb उपयोग करने के लिए की आवश्यकता होगी,

$wpdb = DB::getInstance(); 

एक विधि के भीतर से नहीं बल्कि भयानक global से,: कहीं और (मेरे मामले में एक गैर वर्डप्रेस कक्षा में), तो आप उपयोग Juse कर सकते हैं।

+0

$ wpdb – hidden

+0

वाह प्राप्त करने का सुंदर तरीका वर्ड, मैं वर्डप्रेस 'डीबीए और डीबी.एफपी फ़ाइल के बारे में और कहां से जान सकता हूं? – BenRacicot

+0

इसके साथ समस्या यह है कि कोड अभी भी वर्डप्रेस फ़ंक्शंस जैसे apply_filter को कॉल करता है। मैं किसी भी अन्य बाहरी PHP फ़ाइलों (या पूरी बात) को शामिल करने के आसपास एक रास्ता खोजने की कोशिश कर रहा हूं। –

11

आप निम्न कोड का उपयोग कर नई .php फ़ाइल में $ wpdb का उपयोग कर सकते हैं जो विषय फ़ोल्डर के अंदर है।

$url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
$url = $_SERVER['REQUEST_URI']; 
$my_url = explode('wp-content' , $url); 
$path = $_SERVER['DOCUMENT_ROOT']."/".$my_url[0]; 

include_once $path . '/wp-config.php'; 
include_once $path . '/wp-includes/wp-db.php'; 
include_once $path . '/wp-includes/pluggable.php'; 

global $wpdb; 
+0

जहां तक ​​मैं देख सकता हूं, यह केवल एकमात्र तरीका है जो न्यूनतम कोड लोड करने के लिए यहां वर्णित है, केवल wpdb का उपयोग करने के लिए, वर्डप्रेस को लोड किए बिना ... –

2

निम्नलिखित दो कदम पर्याप्त हैं।

  1. WP-ब्लॉग- header.php फ़ाइल
  2. $ wpdb, वैश्विक $ wpdb के रूप में रखा उपयोग करने से पहले शामिल करें;

उसके बाद इस पृष्ठ में आप किसी भी वैश्विक चर का उपयोग कर सकते हैं। सुनिश्चित करें कि आप wp-blog-header.php का सही पथ शामिल करें। कई फाइलों को शामिल करने की आवश्यकता नहीं है।

3

आपको केवल आवश्यकताएं चाहिए ('../../../ wp-load.php');

और फिर आप सभी वर्डप्रेस क्लासेस हुक और सब कुछ लोड हो जाएगा। अब आप ग्लोबल $ wpdb का उपयोग कर डेटाबेस के साथ पूर्णांक शुरू कर सकते हैं और wpdb इंस्टेंस

4

आपको अपनी स्क्रिप्ट में wp-load.php फ़ाइल को शामिल करने की आवश्यकता है। इस बारे में

define('SHORTINIT', true); 

require('/path/to/wp-load.php'); 

//Here you can use WordPress core features, for example the $WPDB object 

अधिक जानकारी के लिए और देखो क्या लोड:

require('the/path/to/wp-load.php file'); 
4

यह चाल भी करना चाहिए:

preg_match('/^(.+)wp-content\/.*/', dirname(__FILE__), $path); 
    include($path[1] . 'wp-load.php'); 
1

सिर्फ एक लाइन के साथ तेजी से और हल्के तरीका

की आवश्यकता है (dirname (_FILE__) '/ WP-ब्लॉग- header.php। ');

कारण क्योंकि वर्डप्रेस index.php लोड हो रहा है initializes और जब आप index.php जाँच, जैसा कि आप देख है:

की आवश्यकता होती है (dirname (__FILE__) '/ WP-ब्लॉग- header.php'।) ;

यह लोड और बूटस्ट्रैप वर्डप्रेस।

तो वर्डप्रेस के बाहर वर्डप्रेस का उपयोग करने के स्थापित करते हैं, बस एक नई फ़ाइल बनाने और उसके बाद लिखें:

आवश्यकता होती है, (dirname (__FILE__) '/ WP-ब्लॉग- header.php'।)

फिर परीक्षण के लिए, लिखें: वैश्विक $ wpdb; var_export ($ wpdb)।

तो अब आपके पास सभी वर्डप्रेस एपीआई और डेटाबेस ऑब्जेक्ट $ wpdb तक पहुंच है।

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