जैसा कि मैंने उल्लेख किया है कि मैं तुरंत इस आवश्यकता पर काम करना शुरू करने वाला था इसलिए मैं हेडवे बना रहा हूं। यह देखते हुए कि मैं इन्हें नीचे गिरा रहा हूं मुझे लगा कि इन्हें पोस्ट करना शुरू करना सबसे अच्छा है। फिर भी, अगर कोई अन्य व्यक्ति कुछ हिस्सों को पोस्ट / कर सकता है (मैंने कुछ नहीं किया है) तो मुझे खुशी होगी कि मैंने आपको जो भी किया है उसे कॉपी करने और सबसे अच्छे उत्तर के रूप में आपके उत्तर का चयन करने में खुशी होगी। तब तक मैं कोड पोस्ट करना शुरू करूंगा।
पहली बात: शामिल करें wp-load.php
:
चूंकि हम आरंभीकरण को चलाने के लिए वेबसाइट के मूल में एक स्टैंडअलोन फ़ाइल बना रहे हैं, जिसका उपयोग केवल उस साइट को "बूटस्ट्रैप" करने के लिए किया जाएगा (जिसे मैंने मेरा कहा था /my-init.php
) हम /wp-load.php
वर्डप्रेस एपीआई कार्यों को लोड करने के लिए शामिल करके शुरू करते हैं:
<?php
include "wp-load.php";
साइट के लिए उपयोगकर्ता बनाना
हम अपने उपयोगकर्ताओं को बनाने के लिए wp_insert_user()
स्थित फ़ंक्शन का उपयोग करेंगे /wp-includes/registration.php
। यह फ़ाइल डिफ़ॉल्ट रूप से लोड नहीं हुई है, इसलिए हमें इसे कॉल के साथ स्वयं लोड करना होगा require_once()
।
हम get_user_by()
फ़ंक्शन का उपयोग पहले यह देखने के लिए भी करेंगे कि क्या उपयोगकर्ता पहले ही बनाया जा चुका है; यदि वे नहीं करते हैं तो कोड को दो बार चलाने की आवश्यकता नहीं है। नोट: यह एक पैटर्न का पालन करेगा; उदाहरण के लिए, हमारी स्क्रिप्ट को किसी भी चीज़ की नकल या ओवरराइट नहीं करना चाहिए यदि कई बार कॉल किया जाता है, खासकर जब उपयोगकर्ताओं ने किसी भी आइटम को जोड़ने या बदलने की योजना बनाई है, जिसे हमने शुरू करने के लिए कहा है।
require_once( ABSPATH . WPINC . '/registration.php');
$user = get_user_by('slug','johnsmith');
if (!is_object($user)) {
wp_insert_user(array(
'user_login' => 'johnsmith',
'role' => 'administrator',
'user_email' => 'johnsmith@example.com',
'user_url' => 'http://example.com',
'first_name' => 'John',
'last_name' => 'Smith',
'comment_shortcuts' => '',
'use_ssl' => '0',
'user_pass' => '12345',
));
}
"हैलो डॉली" प्लगइन को हटाना
"हैलो डॉली" प्लगइन ( क्षमा करें मैट ) को हटाने के लिए हम delete_plugins()
फ़ंक्शन का उपयोग करेंगे । delete_plugins()
फ़ाइल पथों की एक सरणी की अपेक्षा करता है जो /wp-content/includes/
निर्देशिका के सापेक्ष हैं । के लिए हैलो डॉली प्लगइन फ़ाइल पथ बस है hello.php
के बाद से हैलो डॉली प्लगइन अपने आप निर्देशिका में संग्रहीत नहीं है लेकिन सबसे प्लगइन्स के लिए यह के रूप में हो जाएगा {$subdir}\{$filename}.php
; यानी Akismet के लिए फ़ाइल पथ है akismet/akismet.php
।
हालाँकि, delete_plugins()
तब तक उपलब्ध नहीं है जब तक हमने शामिल नहीं किया है /wp-admin/includes/plugin.php
और एक निर्भरता भी है wp-admin/includes/file.php
इसलिए हम require_once()
दोनों को कॉल करने से पहले delete_plugins()
। अंत में हम यह देखने के लिए कि क्या मुख्य प्लगइन फाइल मौजूद है, इसे हटाने के प्रयास से पहले WP_PLUGIN_DIR
संयुक्त का उपयोग file_exists()
करते हैं (ऐसा नहीं है कि अगर हम लापता फ़ाइल को हटाने की कोशिश करें, लेकिन यह वास्तव में पहले जाँच करने के लिए अधिक सुरुचिपूर्ण है और आपको यह जानने की आवश्यकता हो सकती है कि कैसे किसी और कारण से) :
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
if (file_exists(WP_PLUGIN_DIR . '/hello.php'))
delete_plugins(array('hello.php'));
ध्यान दें कि कभी-कभी delete_plugins()
फ़ाइल अनुमतियों के कारण विफल हो जाएगा या शायद तथ्य यह है कि एक प्लगइन वर्तमान में सक्रिय है या कोई अन्य कारण है जिसे आपको पहले हल करना होगा लेकिन हमारे उपयोग के मामले के लिए हैलो डॉली बिना किसी लड़ाई के चली जाती है।
रिपॉजिटरी प्लगइन्स डाउनलोड करना, इंस्टॉल करना और सक्रिय करना
मुझे वास्तव में अब रिपॉजिटरी से प्लगइन्स डाउनलोड करने की आवश्यकता नहीं है (मैं सोच रहा था कि यह सिर्फ एक अच्छा होगा) हम इस आवश्यकता को स्लाइड करने जा रहे हैं और इसे बाद में फिर से जारी करेंगे।
अपने प्लगइन्स को सक्रिय करना
अगला हमारे अपने कस्टम प्लगइन्स को सक्रिय कर रहा है। हम मान रहे हैं कि हमने उन्हें पहले ही प्लगइन डायरेक्टरी में अपलोड कर दिया है और हमें वर्डप्रेस के लिए उन्हें सक्रिय करने की आवश्यकता है । ( नोट : यह तकनीक रिपॉजिटरी प्लगइन्स को भी सक्रिय करने के लिए काम करेगी, यह सिर्फ उन्हें पहले डाउनलोड और इंस्टॉल नहीं करेगी।)
हम उस activate_plugin()
फ़ंक्शन का उपयोग करेंगे, जिसमें शामिल होना delete_plugins()
आवश्यक /wp-admin/includes/plugin.php
है, लेकिन उस स्थिति में ज़रूरत नहीं है जब /wp-admin/includes/file.php
आपको केवल सक्रियण को स्वचालित करने और हटाने की आवश्यकता नहीं है।
हम फिर से अस्तित्व के लिए परीक्षण करेंगे (सक्रिय होने की आवश्यकता नहीं है, नहीं तो एह?) और हम उस is_plugin_active()
फ़ंक्शन का उपयोग करके भी सत्यापित करेंगे कि प्लगइन पहले से सक्रिय नहीं है। नोट मैंने इस बार ( $plugin_filepath
और $plugin_dir
) कुछ चर का उपयोग किया था ताकि प्लगइन पहचानकर्ता को कई बार दोहराया जा सके।
हमारा उदाहरण है कि उपनिर्देशिका my-custom-plugin.php
में स्थित प्लगइन को सक्रिय करता है my-custom-plugin
:
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
$plugin_filepath = 'my-custom-plugin/my-custom-plugin.php';
$plugin_dir = WP_PLUGIN_DIR . "/{$plugin_filepath}";
if (file_exists($plugin_dir) && !is_plugin_active($plugin_filepath))
activate_plugin($plugin_filepath);
आपका पसंदीदा विषय सक्रिय करना
किसी विषय को सक्रिय करना, प्लगइन को हटाने या सक्रिय करने की तुलना में थोड़ा आसान है, तुलनात्मक रूप से बोलना; एक फ़ंक्शन कॉल वह सब है जो आवश्यक है switch_theme()
:। switch_theme()
समारोह दो को स्वीकार करता है (2) : मापदंडों टेम्पलेट और स्टाइलशीट । ठीक है, कम से कम यह है कि मापदंडों का नाम क्या है। आप पेरेंट थीम और चाइल्ड थीम के संदर्भ में अधिक परिचित हो सकते हैं ।
यह मानते हुए कि आपने डिफ़ॉल्ट TwentyTen थीम के साथ एक बाल थीम बनाया है जो वर्डप्रेस के पेरेंट थीम होने के साथ आता है और आपने इसे "मेरा कस्टम थीम" कहा है और इसे /wp-content/themes/my-custom-theme
निर्देशिका में रखा है , आप इस कॉल का उपयोग करके अपने विषय को सक्रिय करेंगे:
switch_theme('twentyten', 'my-custom-theme');
लेकिन क्या होगा अगर यह एक बाल विषय नहीं है? यह आसान है, बस दोनों मापदंडों के रूप में डायरेक्टरी स्लग / थीम आइडेंटिफ़ायर (यानी जो /wp-content/themes
आपके विषय में उपनिर्देशिका का नाम है ) पास करें । मान लें कि आप Ian D Stewart द्वारा थीम विषय को सक्रिय करना चाहते हैं जिसे आप इस तरह कहते हैं:switch_theme()
switch_theme('thematic', 'thematic');
व्यक्तिगत रूप से मुझे लगता है कि दोनों विवरणों पर नज़र रखना थोड़ा अजीब है, इसलिए मैंने एक फ़ंक्शन लिखा है जो फ़ंक्शन activate_my_theme()
को सुनिश्चित करने के लिए पहले चेक करता है get_current_theme()
और यदि इसे सक्रिय नहीं करता है। आपको बस इसे बाल विषय (उर्फ "स्टाइलशीट") बताने की आवश्यकता है और यह फ़ंक्शन के विवरण को पकड़कर आपके लिए मूल विषय (उर्फ "टेम्पलेट") का पता लगाता है get_theme()
।
activate_my_theme('My Current Theme');
function activate_my_theme($theme_name) {
if ($theme_name!=get_current_theme()) {
$theme = get_theme($theme_name);
switch_theme(
$theme['Template'],
$theme['Stylesheet']
);
}
}
एक प्रमुख बिंदु जिसके बारे में पता होना चाहिए ; इस get_theme()
समारोह में बाल थीम का नाम पारित होने की उम्मीद है , न कि यह निर्देशिका स्लग / थीम पहचानकर्ता है। (यह नाम थीम के style.css
फाइल के हेडर में "थीम नेम:" सेक्शन में आता है । सौभाग्य से get_current_theme()
फंक्शन नाम भी वापस कर देता है।)
style.css
वर्डप्रेस डिफ़ॉल्ट थीम ट्वेंटी टेन की फ़ाइल में हेडर का निरीक्षण करते हुए हम देखते हैं कि यह नाम वास्तव में है 'Twenty Ten'
:
/*
Theme Name: Twenty Ten
Theme URI: http://wordpress.org/
Description: The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar.
Author: the WordPress team
Version: 1.1
Tags: black, blue, white, two-columns, fixed-width, custom-header, custom-background, threaded-comments, sticky-post, translation-ready, microformats, rtl-language-support, editor-style
*/
"हैलो वर्ल्ड" पोस्ट को हटाना
आगे हम "हैलो वर्ल्ड" पोस्ट को हटाना चाहते हैं । आपने देखा होगा कि @Rarst ने हमें दिखाया है कि wp_delete_post()
फ़ंक्शन का उपयोग कैसे किया जाता है जो कि वास्तव में हमें चाहिए। जैसा कि उन्होंने बताया कि दूसरा पैरामीटर पूरी तरह से पोस्ट को डिलीट कर देगा क्योंकि इसे कूड़ेदान में ले जाने का विरोध है और पहला पैरामीटर है $post->ID
।
बेशक, इसके बजाय स्लग को निर्दिष्ट करने में सक्षम होना अच्छा होगा $post->ID
और इसलिए मैं ऐसा करने का एक तरीका खोजने का निर्णय लेता हूं। कुछ स्पेलुनकिंग के बाद मैंने पाया कि वर्डप्रेस में दुर्भाग्यवश नाम का एक फंक्शन है, get_page_by_path()
जो वास्तव में हमें इसके स्लग द्वारा किसी भी पोस्ट प्रकार को देखने की अनुमति देता है (यह दुर्भाग्यवश नाम दिया गया है क्योंकि आप इसे खोजने की कोशिश कर सकते हैं जब आप पोस्ट के अलावा अन्य प्रकार के साथ काम करने की कोशिश कर सकते हैं 'page'
।)
चूंकि हम get_page_by_path()
वर्डप्रेस-डिफाइंड कंटीन्यू को पास करते हैं, OBJECT
यह पोस्ट ऑब्जेक्ट के रूप में हमारे पास वापस आ जाएगा। तीसरे पैरामीटर के लिए हमने 'post'
संकेत दिया कि हम इसे पोस्ट प्रकारों को देखने के लिए चाहते थे 'post'
। चूँकि get_page_by_path()
हम जिस पोस्ट ऑब्जेक्ट की आवश्यकता करेंगे या वापस करेंगे null
यदि कोई पोस्ट स्लग से मेल नहीं खाती है तो हम अस्तित्व की जांच कर सकते हैं और उसी समय एक लुकअप कर सकते हैं:
$post = get_page_by_path('hello-world',OBJECT,'post');
if ($post)
wp_delete_post($post->ID,true);
नोट: हम डेटाबेस में हर पोस्ट को हटाने के लिए कोड चला सकते थे, लेकिन अगर हम चाहते थे कि हम इस कोड को फिर से नहीं चला पाएंगे तो हमने उन पोस्ट्स को जोड़ दिया है जिन्हें हम रखना चाहते हैं और जो हमारे डिजाइन बाधाओं में से एक थी।
आगामी...
जब तक मैं यह कर रहा हूँ या किसी और की मदद नहीं करता तब तक मैं इसे जोड़कर रखूँगा।
Create Menus for Custom Pages
? क्या आपका मतलब है कुछ पन्नों पर व्यक्तिगत मेनू क्षेत्र या क्या?