WordPress Custom Table – Data Manipulation – पिछले Sections में हमने ऐसे Plugin Development के बारे में जानाए जिनमें केवल सामान्य Settings Data होते हैं, जिन्हें Store करने हमें अलग से Table Create करने की जरूरत नहीं होती।
हालांकि WordPress Database में कई Tables होते हैं, जिनमें हम हमारी ज्यादातर प्रकार की जरूरतों को पूरा करने से सम्बंधित Data को Store कर सकते हैं लेकिन कई बार हमें ऐसे Plugin या Theme बनाने की जरूरत होती है, जिनके Data को ज्यादा बेहतर तरीके से Manage व Maintain करने के लिए हमें उन्हें अलग Table में Store करना ही बेहतर तरीका होता है और इस Section में हम इसी विषय में विस्तार से चर्चा करेंगे।
किसी भी Plugin से सम्बंधित मूल रूप से दो प्रकार के Data हो सकते हैं। पहले प्रकार के Data वे Data होते हैं, जो कि हमारे Plugin से सम्बंधित होते हैं। सामान्यत: ये Data हमारे Plugin के Setup व Configuration से सम्बंधित Data होते हैं, जिन्हें हम WordPress के Settings API का प्रयोग करके Options Table में Store करते हैं। इस प्रकार के Data को Plugin User अपनी जरूरत के अनुसार Change या Delete तो कर सकता है, लेकिन इनके Change होने से Options Table के Records की संख्या Increase नहीं होती।
जबकि दूसरे प्रकार के Data Collected Data होते हैं, जिससे सम्बंधित Records समय के साथ बढते रहते हैं। ये Data WordPress Posts, Pages, Comments या अन्य WordPress Components से सम्बंधित हो सकते हैं। इसलिए जब हमें ऐसे Data को Handle करने के लिए Plugin बनाना हो, जो कि समय के साथ Increase हो सकते हों, तो इस प्रकार के Data को Store व Manipulate करने हेतु हमारे लिए हमेंशा Custom Table Create करना ही बेहतर रहता है।
Creating Custom Table
Table Creation से सम्बंधित Concept को समझने का सबसे बेहतर तरीका यही है कि हम एक उदाहरण द्वारा इस प्रक्रिया को समझें। मानलो कि हम एक ऐसा Plugin Create करना चाहते हैं, जो कि हमारी WordPress Site/Blog पर आने वाले हर User का IP Address व Timestamp Record करे। इस प्रकार के Plugin द्वारा Collect होने वाले Data ऐसे हैं जो कि हर नए User के साथ Increase होंगे। इसलिए इस प्रकार के Data को Hold करने के लिए हम एक नया Table Create कर सकते हैं जिसका Structure कुछ निम्नानुसार हो सकता है:
HIT_ID | HIT_IP | HIT_DATE |
int(11) NOT NULL AUTO_INCREMENT | varchar(100) NOT NULL | datetime |
जबकि यदि हम इस Table को MySql Console द्वारा Create करना चाहें, तो लिखा जाने वाला DDL SQL Code निम्नानुसार होगा-
CREATE TABLE wp_hits ( hit_id INT( 11 ) NOT NULL AUTO_INCREMENT, chitin VARCHAR( 100 ) NOT NULL, hit_date DATETIME );
इस Custom Table को WordPress के Database में Create करने के लिए WordPress API हमें dbDelta() नाम का एक Function Provide करता है, लेकिन WordPress Initialization Process के दौरान ये Function Automatically Load नहीं होताए क्योंकि हमें हर Plugin के लिए नया Custom Table Create करने की जरूरत नहीं होती।
इसलिए इस Function को उपयोग में लेने के लिए हमें इस API Function को अपने Plugin में Manually Load करना पडता है और क्योंकि ये API Function WordPress के upgrade.php File में होता है, इसलिए इस File को Current Plugin द्वारा Load करने के लिए हमें निम्न Statement Use करना होता है:
require_once(ABSPATH . ‘wp-admin/includes/upgrade.php’);
इस प्रकार से यदि हम Custom Table Create करना चाहें, तो हमें हमारे Plugin में सारे Codes को कुछ निम्नानुसार लिखना होगा-
<?php $sql = "CREATE TABLE" . wp_hits ."( hit_id INT(11) PRIMARY KEY AUTO_INCREMENT, chitin VARCHAR(100) NOT NULL, hit_date DATETIME );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); ?>
हालांकि उपरोक्त Codes को यदि हम हमारी Plugin File में Specify करके Plugin को Run करें, तो WordPress Database में hits नाम की एक Custom Table तो Create हो जाएगी] लेकिन Plugin से सम्बंधित Custom Table तभी Create होनी चाहिए, जबकि Plugin को Activate किया जाए और इस जरूरत को पूरा करने के लिए हम WordPress के register_activation_hook() API Function को निम्नानुसार Use कर सकते हैं:
<?php register_activation_hook(__FILE__, 'HITS_Install'); function HITS_Install(){ $sql = "CREATE TABLE" . wp_hits ."( hit_id INT(11) PRIMARY KEY AUTO_INCREMENT, chitin VARCHAR(100) NOT NULL, hit_date DATETIME );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } ?>
हालांकि उपरोक्तानुसार हम hits नाम की Custom Table Create कर सकते हैं, लेकिन यदि हम चाहें कि इस Newly Create होने वाली Custom Table के साथ WordPress का Prefix भी Associated हो, तो इस जरूरत को पूरा करने के लिए हम उपरोक्त Code को निम्नानुसार Modify कर सकते हैं:
<?php register_activation_hook(__FILE__, 'HITS_Install'); function HITS_Install(){ global $wpdb; $tablename = $wpdb->prefix . "hits" ; $sql = "CREATE TABLE $tablename( hit_id INT(11) PRIMARY KEY AUTO_INCREMENT, chitin VARCHAR(100) NOT NULL, hit_date DATETIME );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } ?>
जब हम उपरोक्तानुसार Modified Code वाले Plugin को Activate करते हैं, तो इस बार Create होने वाली Table का नाम “hits” नहीं बल्कि “wp_hits” रहता है जबकि हम ये मान रहे है कि हमारे WordPress Installation का Prefix “wp_” है।
चूंकि, हम किसी Plugin को अपनी जरूरत के अनुसार Activate करके Deactivate कर सकते हैं और फिर उस Deactivated Plugin को फिर से Activate कर सकते हैं। इस स्थिति में एक बार Activate करने पर जो Custom Tables Create होती हैं, Plugin को Deactivate करके फिर से Reactivate करने पर वे ही Tables यदि पहले से Exist हों, तो फिर से Recreate नहीं होती।
यानी Custom Table पहले से Exist है या नहीं, इस बात का पता dbDelta() API Function द्वारा पहले ही लगा लिया जाता है और यदि Create होने वाली Custom Table पहले से Exist हो, तो dbDelta() Function उस Custom Table को फिर से Recreate नहीं करता।
चूंकि हम हमारी जरूरत के अनुसार अपने Plugin को Modify कर सकते हैं और Plugin के साथ ही किसी Specific Type की जरूरत को पूरा करने के लिए हमें हमारी Create होने वाली Custom Table के Structure को Change करने की भी जरूरत पड सकती है।
इसलिए Create होने वाली Custom Table के साथ ही यदि हम हमारे Plugin के Version Number को भी WordPress की Options Table में Record कर दें, ताकि भविद्ग; में यदि कभी हम हमारे Custom Table के Structure को Modify करते हैं, उस स्थिति में WordPress के Admin Panel द्वारा Plugin को Update करने के साथ ही Custom Table का Structure भी Modify किया जा सके और इस जरूरत को पूरा करने के लिए हम Settings API के add_option() API Function को कुछ निम्नानुसार तरीके से Use कर सकते हैं:
add_option(“HITS_db_version”, “1.0”);
जब हम उपरोक्त Statement का प्रयोग करते हुए हमारे Plugin के साथ Database के Version Number को भी Record कर लेते हैं, तो यदि भविद्ग; में कभी हम हमारे Plugin के साथ Create होने वाले Custom Table के Structure को Change करना चाहें, तो इस Recorded Version Number के आधार पर इस बात को तय कर सकते हैं कि हमें हमारे Custom Table के Structure को Modify करना है या नहीं।
अपने Plugin के Version Number को Record करते हुए अपने Plugin के Code को यदि हम फिर से Modify करें, तो हमारा Code कुछ निम्नानुसार हो सकता है:
<?php register_activation_hook(__FILE__, 'HITS_Install'); function HITS_Install(){ global $wpdb; //Custom Table Name with Prefix. $tablename = $wpdb->prefix . "hits" ; // Plugin’s Table Structure Version Number $HITS_db_version = "1.0"; //Verify if the Table already exists? if($wpdb->get_var("SHOW TABLES LIKE '$tablename'") != $tablename){ //Custom Table Creation Query $sql = "CREATE TABLE $tablename ( hit_id INT(11) PRIMARY KEY AUTO_INCREMENT, chitin VARCHAR(100) NOT NULL, hit_date DATETIME );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); //Record Plugin’s Table Structure Version Number in Options Table. add_option("HITS_db_version", $HITS_db_version); } } ?>
जब हम DbDelta() API Function Use करते हैं, तब हमेंशा इस बात का ध्यान रखना चाहिए कि कभी भी किसी Table Column को Specify करने के बाद Extra Space का प्रयोग नहीं करना चाहिए। यानी यदि हम निम्नानुसार दो Column Information को Specify करें:
hit_id INT(11) PRIMARY KEY AUTO_INCREMENT, hit_ip VARCHAR(15) NOT NULL, …
तो DbDelta() API Function बिना किसी तरह का Error दिए हुए हमारी Table Create नहीं करता क्योंकि हमने दोनों Columns को Comma से Separate तो किया है लेकिन Command के तुरन्त बाद में एक Extra Space भी दे दिया है, जो कि DbDelta() API Function को Fail कर देता है। इसलिए यदि हम उपरोक्त Line को फिर से लिखें, तो एक Valid Statement निम्नानुसार होगा-
hit_id INT(11) PRIMARY KEY AUTO_INCREMENT,hit_ip VARCHAR(15) NOT NULL, …
जहां हम देख सकते हैं कि पहले Column के अन्त में Specified Comma के बाद के Space को Remove कर दिया गया है। इसी तरह से जब हम Columns के साथ MYSQL Keywords का प्रयोग करते हैं, तो उन Keywords के बीच भी एक भी Extra Space नहीं होना चाहिए। यानी-
hit_id INT(11) PRIMARY KEY AUTO_INCREMENT,…
ये Statement DbDelta() API Function के Execution को Fail कर देगा व Custom Table Create नहीं होगी क्योंकि PRIMARY KEY व AUTO_INCREMENT दोनों Keywords के बीच केवल एक ही Space होना चाहिए, जबकि उपरोक्त Statement में हमने दो Space Place कर दिए हैं। इसलिए यदि हम उपरोक्त Statements को सही तरीके से लिखें, तो हमारा Statement कुछ निम्नानुसार होगा-
hit_id INT(11) PRIMARY KEY AUTO_INCREMENT,…
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Advance WordPress in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।
Advance WordPress in Hindi | Page: 835 | Format: PDF