ड्रॉइंग सक्रिय php. वर्डप्रेस मल्टीसाइटमध्ये सानुकूल नोंदणी पृष्ठ कसे तयार करावे

आम्ही मानक wp-signup.php ऐवजी मल्टीसाइटसाठी आमचे स्वतःचे नोंदणी पृष्ठ तयार करतो.

ठराविक स्थापनेत वर्डप्रेस पृष्ठनोंदणी (अधिकृतीकरण, पासवर्ड रीसेट) wp-login.php फाइल आउटपुट करते.

  • /wp-login.php - अधिकृतता
  • /wp-login.php?action=register - नोंदणी
  • /wp-login.php?action=lostpassword - पासवर्ड रीसेट

wp-login.php मध्ये मल्टीसाइटसाठी स्वतंत्र अटी आहेत. त्यामुळे, जेव्हा तुम्ही मल्टीसाइटवर /wp-login.php?action=register या लिंकचे अनुसरण करता, तेव्हा WordPress पृष्ठ /wp-signup.php वर पुनर्निर्देशित करेल. बऱ्याच थीममुळे पृष्ठ फार आकर्षक दिसत नाही, म्हणून आम्ही स्वतःचे बनवू.

नेटवर्कची मुख्य साइट

डीफॉल्टनुसार, वर्डप्रेस नेटवर्कच्या मुख्य डोमेन (साइट) वर नोंदणी पृष्ठ (wp-signup.php) उघडते. तथापि, आपण आपल्या नेटवर्कमधील प्रत्येक साइटसाठी स्वतंत्र नोंदणी पृष्ठ बनवू शकता, जरी त्यांची थीम भिन्न असली तरीही. आम्ही त्या प्रकरणाचा विचार करू जेथे नेटवर्कमधील सर्व साइट्सचे स्वतःचे नोंदणी पृष्ठ आहे, परंतु समान थीम वापरली जाते आणि साइट केवळ भाषेत भिन्न आहेत. तुम्ही वेगवेगळ्या थीम वापरत असल्यास, तुम्हाला आणखी कोड लिहावे लागेल.

functions.php?

नाही. वर्डप्रेसबद्दलच्या प्रत्येक लेखात या फाईलच्या नावाचा उल्लेख केलेला दिसतो. आमच्या बाबतीत, नोंदणी कार्यक्षमता अनेक साइट्ससाठी डिझाइन केलेली आहे हे लक्षात घेता, ते MU प्लगइनमध्ये समाविष्ट करणे अर्थपूर्ण आहे, जे कोणतीही साइट उघडल्यावर लोड केले जातात.

गेय विषयांतर

हे लक्षात घेण्यासारखे आहे की एमयू प्लगइन नियमित प्लगइन्सपूर्वी आणि वर्डप्रेस कोर पूर्णपणे लोड होण्यापूर्वी लोड केले जातात, म्हणून काही फंक्शन्स कॉल केल्याने PHP मध्ये घातक त्रुटी येऊ शकतात. अशा "लवकर" लोडिंगचे देखील फायदे आहेत. समजा की कोणत्याही थीममध्ये फंक्शन.php फाइल थीमवरून लोड होण्यापूर्वीच ट्रिगर झालेल्या काही क्रियांना तुम्ही संलग्न करू शकत नाही. याचे उदाहरण म्हणजे jetpack_module_loaded_related-posts (संबंधित-पोस्ट हे मॉड्यूलचे नाव आहे) फॉर्मच्या जेटपॅक प्लगइनमधील क्रिया, ज्याच्या मदतीने जेटपॅकमधील मॉड्यूल्सच्या क्रियाकलापांचे निरीक्षण करणे शक्य आहे. थीम फाइलमधून या क्रियेला "संलग्न" करणे अशक्य आहे, कारण थीम लोड होण्यापूर्वीच क्रिया सुरू झाली आहे - थीमपूर्वी प्लगइन लोड केले जातात. तुम्ही कोडेक्समधील क्रिया संदर्भ पृष्ठावरील वर्डप्रेस लोडिंग ऑर्डरच्या सामान्य चित्रावर एक नजर टाकू शकता.

फाइल ऑर्डर

MU प्लगइनमध्ये कितीही फाइल्स आणि तुम्हाला तार्किक वाटणारी कोणतीही रचना असू शकते. मी या पदानुक्रमाला चिकटून आहे:

|-mu-plugins |-|-load.php |-|-|-selena-network |-|-|-|-साइनअप |-|-|-|-|-plugin.php |-|-|-| --|-... |-|-|-|-जेटपॅक |-|-|-|-|-plugin.php

load.php फाइलमध्ये आमच्या नेटवर्कसाठी सर्व आवश्यक “प्लगइन्स” आहेत:

// सर्व ऍडऑन्स लोड_muplugin_textdomain ("सेलेना_नेटवर्क", "/selena-network/languages/") साठी अनुवादित लोड करा; // नेटवर्क साइनअपसाठी WPMU_PLUGIN_DIR आवश्यक आहे. "/selena-network/signup/plugin.php"; // आणखी एक प्लगइन // WPMU_PLUGIN_DIR आवश्यक आहे ...

सेलेना-नेटवर्क फोल्डरच्या आत, प्लगइन फोल्डर संग्रहित केले जातात, प्रत्येकाचे स्वतःचे plugin.php, जे आम्ही load.php मध्ये समाविष्ट करतो. हे तुम्हाला लवचिकता आणि गोष्टी लवकर बंद आणि चालू करण्याची क्षमता देते.

नोंदणी पृष्ठ पत्ता

नोंदणी पृष्ठाचा पत्ता निर्दिष्ट करण्यासाठी, wp_signup_location फिल्टर वापरा. हे wp-login.php फाइलमध्ये आढळू शकते आणि wp-signup.php वर पुनर्निर्देशित करण्यासाठी जबाबदार आहे.

केस "नोंदणी करा" : जर (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); बाहेर पडा;

चला mu-plugins/selena-network/signup/plugin.php मध्ये आमचे कार्य जोडू, जे वर्तमान साइटवरील नोंदणी पृष्ठाचा पत्ता देईल:

फंक्शन selena_network_signup_page ($url) ( home_url परत करा () . "/signup/"; ) add_filter ( "wp_signup_location", "selena_network_signup_page", 99);

selena_network हा उपसर्ग आहे जो मी माझ्या साइटवरील MU प्लगइनमधील सर्व फंक्शन्सच्या नावे टक्कर टाळण्यासाठी वापरतो, तो तुमच्या स्वतःच्या अद्वितीय उपसर्गाने बदलला पाहिजे. फिल्टर जोडण्याचे प्राधान्य 99 आहे, कारण काही प्लगइन्स, उदाहरणार्थ bbPress आणि BuddyPress, हा पत्ता त्यांच्या स्वतःच्या सहाय्याने ओव्हरराइट करू शकतात (एमयू प्लगइन नियमित प्लगइनपेक्षा आधी लोड होतात, वर पहा). लक्षात घ्या की अभ्यागताला त्याच डोमेनवर ठेवण्यासाठी network_site_url() ऐवजी home_url() वापरला जातो. पत्ता म्हणून कोणतीही URL वापरली जाऊ शकते.

एक पृष्ठ तयार करणे

आता सामान्य इंटरफेसद्वारे site.com/signup/ पत्त्यासह एक पृष्ठ तयार करूया आणि चाइल्ड थीम फोल्डरमध्ये आमच्यासाठी टेम्पलेट तयार करूया नवीन पृष्ठ- page-signup.php. "साइनअप" या शब्दाऐवजी तुम्ही युनिक आयडी वापरू शकता.

नवीन टेम्पलेटमध्ये, तुम्हाला selena_network_signup_main() फंक्शन कॉल करणे आवश्यक आहे, जे नोंदणी फॉर्म प्रदर्शित करेल.

हे लक्षात घेण्यासारखे आहे की संपूर्ण टेम्पलेट प्रक्रिया पर्यायी आहे आणि त्याऐवजी तुम्ही तुमचा स्वतःचा शॉर्टकोड तयार करू शकता जो selena_network_signup_main() फंक्शनला देखील कॉल करेल.

wp-signup.php आणि wp-activate.php

आता एक फंक्शन बनवू जे नोंदणी फॉर्म प्रदर्शित करेल. हे करण्यासाठी, wp-signup.php आणि wp-activate.php या फाइल्स वर्डप्रेस रूटवरून mu-plugings/selena-network/signup/ वर कॉपी करा (आणि त्यांना mu-plugins/selena-network मध्ये जोडण्यास विसरू नका. /signup/plugin.php). फायलींसह पुढील हाताळणी अत्यंत कठीण आणि वर्णन करण्यासाठी लांब आहेत, म्हणून आपल्याला ते स्वतः करावे लागतील. मी नेमके काय केले पाहिजे याचे वर्णन करेन आणि माझ्या प्रकल्पाच्या स्त्रोत फाइल्स प्रकाशित करेन:

  1. फाईलच्या सुरूवातीस, फंक्शन्सच्या बाहेरील सर्व आवश्यक , फंक्शन कॉल आणि इतर कोड काढून टाका.
  2. नावांमध्ये अद्वितीय उपसर्ग जोडून सर्व कार्ये पुनर्नामित करा.
  3. wp-signup.php कोडचा खालचा भाग selena_network_signup_main फंक्शनमध्ये गुंडाळा आणि अगदी सुरुवातीला ग्लोबल $active_signup लिहा; .
  4. योग्य ठिकाणी लेआउट आपल्या स्वतःच्या सह पुनर्स्थित करा.

wp-activate.php मध्ये तुम्हाला अंदाजे समान गोष्ट करण्याची आवश्यकता आहे:

  1. फंक्शन्सच्या बाहेरील सर्व कोड काढा, लेआउट वेगळ्या फंक्शनमध्ये गुंडाळा.
  2. आवश्यक ठिकाणी लेआउट बदला.

खाते सक्रियकरण पृष्ठासाठी wp-activate.php फाइल जबाबदार आहे. नोंदणी पृष्ठाप्रमाणे, तुम्हाला त्यासाठी स्वतंत्र टेम्पलेट तयार करणे आवश्यक आहे, ज्याच्या आत तुम्हाला wp-activate.php फाइलमधून फंक्शन कॉल करणे आवश्यक आहे.

सक्रियकरण पत्रे पाठवत आहे

नोंदणी पृष्ठ अभ्यागतांना त्यांचे खाते सक्रिय करण्यासाठी लिंकसह ईमेल पाठवते. डीफॉल्टनुसार, हे ms-functions.php फाइलमधील wpmu_signup_user_notification() फंक्शनद्वारे केले जाते. तुम्ही तुमच्या स्वतःच्या कार्यासाठी त्याची कार्यक्षमता घेऊ शकता. हे वैशिष्ट्य वापरणे टाळण्याचे कारण म्हणजे ते wp-activate.php वरून खाते सक्रियकरण लिंक पाठवते. तुम्ही wpmu_signup_user_notification फिल्टर वापरून हे फंक्शन “बंद” करू शकता, ते खोटे परत करू शकता (हे पूर्ण न केल्यास, सक्रियकरण पत्र दोनदा पाठवले जाईल, ठीक आहे, प्रत्यक्षात दोन भिन्न अक्षरे).

फंक्शन Armyofselenagomez_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // ... // फंक्शन wpmu_signup_user_notification() wp_mail($user_email, wp_specialchars_mes_de), $/// ; रिटर्न फॉल्स; ) add_filter("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

परिणामी, सेलेना थीममधील नोंदणी पृष्ठ अधिक स्वच्छ आणि स्वच्छ दिसू लागले.

निष्कर्ष

इंटरनेटवर असेच करण्याचे इतरही बरेच मार्ग आहेत - अपाचे पुनर्निर्देशन, AJAX फॉर्म जे Java Script शिवाय काम करणार नाहीत, इ. मला हे सर्व आवडले नाही, म्हणून मी ते तितकेच योग्यरित्या करण्याचा प्रयत्न केला. माझ्या स्वतःच्या वेबसाइटवर शक्य आहे.

मी लक्षात घेतो की तुम्ही फाइल्स काळजीपूर्वक संपादित कराव्यात आणि मूळ फाइल्सपासून जास्त विचलित न करण्याचा प्रयत्न करा, जेणेकरून भविष्यात, वर्डप्रेसने wp-signup.php आणि wp-activate.php फाइल्स बदलल्यास, तुलना करणे सोपे होईल. बदल शोधण्यासाठी ते एकमेकांसोबत.

मध्ये बघायला विसरू नका स्रोतकोडमध्ये काय आणि कसे होते हे पूर्णपणे समजून घेण्यासाठी वर वर्णन केलेली सर्व कार्ये.

बोनस. स्पॅमर्सपासून संरक्षण

अगदी लहान वर्डप्रेस साइट देखील स्पॅम नोंदणीने त्रस्त असतात. तुम्ही बॉट्स फिल्टर करण्यासाठी अंतहीन परिस्थिती लिहू शकता, अनेकदा तयार करण्याचा प्रयत्न करण्यासारखे कृत्रिम बुद्धिमत्ता🙂 मल्टीसाइटच्या बाबतीत, Apache मधील नियमित पुनर्निर्देशनाने मला खूप मदत केली, ज्याच्या मदतीने मी /wp-signup.php आणि /wp-acitvate.php उघडताना 404 मागितले (मी तज्ञ नाही Apache सेट करताना, त्यामुळे माझे नियम फारसे योग्य नसतील).

RewriteEngine On RewriteBase / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # BEGIN WordPress # आम्ही वर्डप्रेसच्या नियमांना बाय डीफॉल्ट स्पर्श करत नाही :) # ... # वर्ड वर्डप्रेस

P.S मी काही तृतीयपंथी गोष्टींचे शक्य तितके तपशीलवार वर्णन करण्याचा प्रयत्न करतो, कारण जेव्हा मी सुरुवात केली तेव्हा अनेक गोष्टी सुचविणारे आणि समजावून सांगणारे कोणीच नव्हते. माझा असा विश्वास आहे की इतर सामग्रीवरील अशा लहान टिप्स एखाद्याला काहीतरी नवीन शिकण्यास आणि त्यांच्या ज्ञानाच्या क्षेत्राचा विस्तार करण्यास प्रोत्साहित करतील. RewriteRule नोंदी वापरतात नियमित अभिव्यक्ती, ते अजिबात क्लिष्ट नाहीत, उदाहरणार्थ, ^ चिन्ह म्हणजे ओळीची सुरुवात.

प्लगइन सक्रिय केल्यावर फायर होईल अशा फंक्शनची नोंदणी करते.

हे फंक्शन हुकला निर्दिष्ट कॉलबॅक फंक्शन संलग्न करते सक्रिय करा_(प्लगइन)आणि या हुकसाठी एक आवरण आहे.

activate_(प्लगइन) हुकमधील (प्लगइन) मुख्य प्लगइन फाइलच्या सापेक्ष मार्गाच्या नावाने बदलले आहे. उदाहरणार्थ, प्लगइन स्थित असल्यास: wp-content/plugins/sampleplugin/sample.php, तर हुकचे नाव असेल: activate_sampleplugin/sample.php.

आवृत्ती 3.1 पासून. हुक फक्त प्लगइन ॲक्टिव्हेशन दरम्यान फायर होतो आणि दरम्यान फायर होत नाही स्वयंचलित अद्यतनप्लगइन

हे कसे कार्य करते

प्लगइन फंक्शनद्वारे सक्रिय केले जाते सक्रिय_प्लगइन(), ज्यामध्ये activate_(प्लगइन) हुक ट्रिगर केला जातो.

कर्नलमधील activate_plugin() फंक्शन नंतर म्हटले जाते VI वातावरण लोड करत आहे. हे फंक्शन मुख्य प्लगइन फाइल (आणि त्यात निर्दिष्ट केलेली प्रत्येक गोष्ट) कनेक्ट करते आणि नंतर हुकद्वारे निर्दिष्ट कॉलबॅक फंक्शन सक्रिय करते. यामुळे, आमच्या कॉलबॅक फंक्शनमध्ये प्लगइनची सर्व फंक्शन्स आणि क्लासेस उपलब्ध आहेत. परंतु, जेव्हा VI वातावरण लोड केले जाते तेव्हा सर्व मुख्य WP हुक आधीच फायर केलेले असल्याने, हुकवर टांगलेले कोणतेही प्लगइन इव्हेंट, उदाहरणार्थ plugins_loaded , मुख्य प्लगइन फाइल कनेक्ट केलेले असताना यापुढे फायर होणार नाही. याचा अर्थ आमचे प्लगइन कनेक्ट केले जाईल, परंतु पूर्णपणे नाही: ते आधीपासून सक्रिय केलेले असताना कनेक्ट केले जावे तसे नाही.

म्हणून, उदाहरणार्थ, प्लगइनने plugins_loaded इव्हेंट दरम्यान काही केले तर, प्लगइन सक्रिय झाल्यावर त्या सर्व क्रिया होणार नाहीत. उदाहरणार्थ, जर त्यात भाषांतर फाइल समाविष्ट असेल, तर register_activation_hook() साठी निर्दिष्ट केलेले कॉलबॅक फंक्शन ट्रिगर झाल्यावर भाषांतर फाइल समाविष्ट केली जाणार नाही.

नियमानुसार, कॉलबॅक फंक्शन ट्रिगर झाल्यानंतर, 2 इव्हेंट आहेत ज्यावर फंक्शन संलग्न केले जाऊ शकतात: activated_plugin आणि shutdown .

प्लगइन सक्रिय करताना काहीतरी फॅन्सी करण्यासाठी, उदाहरण 5 पहा.

वापरण्याच्या अटी

काही हुक ट्रिगर झाल्यावर कॉल केल्यास फंक्शन कार्य करणार नाही, उदाहरणार्थ plugins_loaded , init. फंक्शनला मुख्य प्लगइन फाइलमधून थेट कॉल करणे आवश्यक आहे. सक्रिय करण्याचे नियम:

    register_activation_hook() ला मुख्य प्लगइन फाइलवरून कॉल केले पाहिजे, जेथे प्लगइनचे नाव: ... निर्देश स्थित आहे, आणि plugins_loaded किंवा init सारख्या कोणत्याही हुकवरून कॉल केला जाऊ नये.

    हुक फंक्शन हुक सारख्याच फाइलमध्ये असणे आवश्यक आहे किंवा दुसर्या फाईलमधून आगाऊ कनेक्ट केलेले असणे आवश्यक आहे.

    हुक फंक्शनमध्ये स्क्रीन आउटपुट (इको) काम करत नाही. कारण रीडायरेक्ट होते आणि तुम्हाला इको दिसणार नाही. पण तुम्ही die() वापरू शकता.

  1. हुक फंक्शनमधून ऍक्सेस करण्यासाठी ग्लोबल व्हेरिएबल्स (असल्यास) स्पष्टपणे परिभाषित करणे आवश्यक आहे.

व्हेरिएबल क्षेत्राबद्दल एक टीप

प्लगइन सक्रिय करताना, मुख्य प्लगइन फाइल ग्लोबल स्कोपमध्ये समाविष्ट केली जात नाही, परंतु activate_plugin() फंक्शनमध्ये समाविष्ट केली जाते. त्यामुळे, प्लगइनच्या सामान्य ऑपरेशनमध्ये ग्लोबल मानले जाणारे व्हेरिएबल्स ग्लोबल नसतील.

त्यामुळे, register_activation_hook() मध्ये वापरलेले फंक्शन ग्लोबल व्हेरिएबल्स पाहू शकत नाही, जरी तुम्ही त्यांना या फंक्शनमध्ये ग्लोबल म्हणून घोषित केले असेल. उदाहरण:

$myvar = "काहीतरी"; register_activation_hook(__FILE__, "myplugin_activate"); फंक्शन myplugin_activate())( global $myvar; echo $myvar; // व्हेरिएबल "समथिंग" च्या समान नाही)

या वैशिष्ट्यामुळे, जागतिक चलने नेहमी स्पष्टपणे निर्दिष्ट करणे आवश्यक आहे. प्लगइनच्या मुख्य भागामध्ये व्हेरिएबल निर्दिष्ट केले असले तरीही, सर्व ग्लोबल व्हेरिएबल ग्लोबल म्हणून परिभाषित केले जाणे आवश्यक आहे. केवळ या प्रकरणात तुम्हाला त्यांच्याकडे कुठेही प्रवेश असेल. उदाहरण:

जागतिक $myvar; // स्पष्टपणे सूचित करा की हे जागतिक चल आहे $myvar = "काहीतरी"; register_activation_hook(__FILE__, "myplugin_activate"); फंक्शन myplugin_activate())( global $myvar; echo $myvar; //> काहीतरी )

कोणतेही हुक नाहीत.

परतावा

निरर्थक. काहीही परत करत नाही.

वापर

register_activation_hook($file, $function); $फाइल (स्ट्रिंग) (आवश्यक)प्लगइनच्या स्वतःच्या नावासह प्लगइनच्या मुख्य PHP फाइलचा मार्ग. सामान्यतः PHP मॅजिक कॉन्स्टंट __FILE__ वापरला जातो. $फंक्शन (स्ट्रिंग/ॲरे/लॅम्बडा) (आवश्यक)

कॉलबॅक फंक्शनचे नाव. वर्गांसाठी, ॲरे वापरा: ॲरे($this, "function_name"); .

फंक्शनला लॉजिकल व्हेरिएबल $network_wide प्राप्त होईल - मल्टीसाइटच्या बाबतीत, साइटच्या संपूर्ण नेटवर्कसाठी प्लगइन सक्रिय केले आहे की नाही.

उदाहरणे

#1. प्लगइन सक्रिय झाल्यावर फंक्शन चालवणे

मुख्य प्लगइन फाइलमध्ये my_plugin_activate() हे फंक्शन आहे असे गृहीत धरू: wp-content/plugins/myplugin/myplugin.php, नंतर प्लगइन ॲक्टिव्हेशन दरम्यान हे फंक्शन चालवण्यासाठी खालील कोड वापरा:

Register_activation_hook(__FILE__, "my_plugin_activate"); फंक्शन my_plugin_activate() ( // सक्रियकरण कोड... )

#२. वर्ग पद्धत चालवणे

प्लगइन PHP वर्ग वापरत असल्यास, सक्रियकरण कोड याप्रमाणे जोडला जाईल:

Register_activation_hook(__FILE__, array("My_Plugin", "install")); क्लास माय_प्लगइन ( स्टॅटिक फंक्शन इंस्टॉल () ( // येथे कोणतेही आउटपुट तयार करू नका... ) )

#३. वेगळ्या फाईलमधून वर्ग पद्धत चालवणे

सक्रियकरण फंक्शन असलेला वर्ग वेगळ्या फाईलमध्ये असल्यास, सक्रियकरण कार्य खालीलप्रमाणे नोंदवा:

एकदा __DIR__ समाविष्ट करा. "/class-My_Plugin.php"; register_activation_hook(__FILE__, array("My_Plugin", "on_activate_function"));

#४. वर्गातूनच वर्ग पद्धत चालवणे

जर तुम्ही __construct() च्या आत असाल तर. महत्वाचे, __FILE__ ने मुख्य प्लगइन फाइल "पाहणे" आवश्यक आहे:

Register_activation_hook(__FILE__, array($this, "YOUR_METHOD_NAME"));

#5 प्लगइन सक्रिय केल्यानंतर लगेच काहीतरी करा

प्लगइन सक्रिय केल्यानंतर, फक्त दोन हुक ट्रिगर केले जातात: activated_plugin आणि shutdown .

जेव्हा तुम्हाला प्लगइन सक्रिय केल्यानंतर ताबडतोब काहीतरी करण्याची आवश्यकता असते, तेव्हा तुम्ही त्यांना फंक्शन संलग्न करू शकता.

जेव्हा हे समाधान योग्य नसेल, तेव्हा तुम्ही WP पर्याय वापरू शकता: पर्यायामध्ये डेटा सेव्ह करा आणि नंतर पर्यायाची उपस्थिती तपासा आणि पर्याय असल्यास काहीतरी करा:

// मुख्य प्लगइन फाइल. ... फंक्शन my_plugin_activate() ( // एक पर्याय जोडा जेणेकरून नंतर, तेथे असल्यास, आम्ही काहीतरी करू शकतो. add_option("Activated_Plugin", "Plugin-Slug"); // येथे सक्रियकरण कोड आहे... ) register_activation_hook(__FILE__, " my_plugin_activate"); फंक्शन load_plugin() ( if (is_admin() && get_option("Activated_Plugin") == "Plugin-Slug") ( // जोडलेला पर्याय हटवा जेणेकरून ते यापुढे कार्य करणार नाही // आणि जे करणे आवश्यक आहे ते करा... delete_option("Activated_Plugin"); // प्लगइन सक्रिय केल्यानंतर काहीतरी करा // उदाहरणार्थ: add_action("init", "my_init_function") ) add_action("admin_init", "load_plugin");

प्लगइन सक्रियतेदरम्यान काहीतरी करण्याचा दुसरा पर्याय म्हणजे आपला इव्हेंट याप्रमाणे तयार करणे:

फंक्शन my_plugin_activate())( // तुमचा हुक सेट करा जेणेकरुन तुम्ही प्लगइनच्या फाइल्समधूनच त्यास संलग्न करू शकता do_action("my_plugin_activate"); ) register_activation_hook(__FILE__, "my_plugin_activate");

#6 फंक्शन वापरण्याचे आणखी एक प्रात्यक्षिक

फंक्शन कसे वापरायचे हे दाखवणारे एक छोटे प्लगइन:

/* प्लगइनचे नाव: एक चाचणी वर्णन: एक चाचणी */ आवश्यक_एकदा dirname(__FILE__) . "/my_other_file.php"; /* हा कोड काम करणार नाही. सक्रियकरण हुक मुख्य फाइलमधून कॉल करणे आवश्यक आहे. register_activation_hook (dirname(__FILE__). "/my_other_file.php", "my_other_function"); */ // हा कार्यरत कोड आहे. register_activation_hook(__FILE__, "test_activated"); /* ग्लोबल व्हेरिएबल्स घोषित करण्याचा आणि त्यात प्रवेश करण्याचा हा योग्य मार्ग आहे. जागतिक चलने स्पष्टपणे घोषित करणे आवश्यक आहे. याशिवाय, तुम्हाला त्यांच्यामध्ये प्रवेश मिळणार नाही. */ जागतिक $some_var; $some_var = "अहो"; // ऍक्टिव्हेशन फंक्शन फंक्शन test_activated())( // येथे $some_var हे हे ग्लोबल $some_var च्या बरोबरीचे नाही; // आणि येथे $some_var हे हे // हे फंक्शन "my_other_file.php" फाइलमध्ये परिभाषित केले आहे. my_other_function(); /* हा पर्याय काम करणार नाही, जर तुम्हाला तात्पुरत्या फाईलमध्ये लॉग लिहायचे असतील तर, जर तुम्हाला एक्टिव्हेशन हुक काम करत असेल तर exit() चा वापर करा*/. echo "test_activated called!";

एक-वेळचे दुवे विविध परिस्थितींमध्ये वापरले जाऊ शकतात: फाइल किंवा पृष्ठावर तात्पुरता प्रवेश प्रदान करण्यासाठी किंवा नोंदणीची पुष्टी करण्यासाठी. या ट्युटोरियलमध्ये आपण वन-टाइम URL कसे तयार करावे आणि त्याची अंमलबजावणी कशी करावी हे दाखवू.

URL तयार करत आहे

चला असे गृहीत धरू की आमच्या वेबसाइटवर वापरकर्ता प्रमाणीकरण प्रणाली आहे. नोंदणीनंतर, आम्ही वापरकर्त्याला ईमेल सत्यापन प्रक्रियेतून जाण्यास सांगतो. अशा लिंक्स तयार करण्यासाठी आपण वापरू शकतो विशेष पॅरामीटरटोकन अशा दुव्याचे उदाहरणः

http://example.com/activate?token=ee97780...

आम्ही हे डेटाबेसशिवाय करू शकत नाही, म्हणून आम्ही ज्या टेबलवर काम करणार आहोत ते पाहू.

टेबल प्रलंबित_वापरकर्ते तयार करा (टोकन CHAR(40) NOT NULL, वापरकर्तानाव VARCHAR(45) NOT NULL, tstamp पूर्णांक रद्द केलेले नाही NULL, प्राथमिक की(टोकन));

आम्ही टेबलमध्ये 3 फील्ड संग्रहित करू: टोकन, वापरकर्तानाव आणि वेळ. टोकन जनरेट करण्यासाठी, आम्ही sha1() फंक्शन वापरू, जे 40 अक्षरांची स्ट्रिंग तयार करते. tstamp फील्ड टोकन जनरेशन वेळ संचयित करेल जेणेकरून आम्ही कालबाह्य झालेल्या लिंक्सचा मागोवा घेऊ शकतो.

टोकन तयार करण्याचे अनेक मार्ग आहेत, परंतु या ट्युटोरियलमध्ये आपण uniqid() आणि sha1() फंक्शन्स वापरू. टोकन कसे व्युत्पन्न केले जाते याची पर्वा न करता, व्युत्पन्न केलेली मूल्ये भिन्न असतील याची खात्री करा आणि डुप्लिकेटची शक्यता कमी आहे.

$टोकन = sha1(uniqid($username, true));

uniqid() फंक्शन पॅरामीटर म्हणून स्ट्रिंग घेते आणि पास झालेल्या वितर्क आणि वर्तमान वेळेवर आधारित एक अद्वितीय अभिज्ञापक आउटपुट करते. तसेच, दुसरा युक्तिवाद म्हणून, हे कार्यएक बुलियन व्हॅल्यू घेते जे युनिकिडला काही अतिरिक्त वर्ण जोडण्यासाठी सिग्नल करेल जेणेकरून मूल्य अद्वितीय असण्याची शक्यता वाढेल. sha1 फंक्शन युनिक आयडेंटिफायर घेते आणि हॅश तयार करते.

ही दोन कार्ये कार्य केल्यानंतर, आमच्याकडे एक अद्वितीय टोकन असेल जे आम्ही URL पत्ते तयार करण्यासाठी वापरू शकतो. आता आपल्याला ते डेटाबेसमध्ये जोडण्याची आवश्यकता आहे:

$query = $db->तयार करा("प्रलंबित_वापरकर्त्यांमध्ये घाला (वापरकर्तानाव, टोकन, tstamp) मूल्ये (?, ?, ?)"); $query->एक्झिक्युट(ॲरे($username, $token, $_SERVER["REQUEST_TIME"]));

कोणता वापरकर्ता सक्रिय केला पाहिजे हे जाणून घेण्यासाठी, आम्ही टेबलमध्ये वापरकर्त्याचे लॉगिन देखील रेकॉर्ड करू. वास्तविक साइटशी जुळवून घेतलेल्या उदाहरणामध्ये, तुम्ही वापरकर्ता आयडी वापरू शकता.

आता आमच्याकडे सर्व आवश्यक माहिती आहे, आम्ही एक तात्पुरती url तयार करू शकतो:

$url = "http://example.com/activate.php?token=$token";

$message =<<

परीक्षा

आता आम्हाला स्क्रिप्टची आवश्यकता आहे, ज्यासाठी आम्ही तपासणी करू. आम्हाला फक्त URL मधील टोकन आणि डेटाबेसमधील टोकनची तुलना करायची आहे. जर तेथे एक असेल आणि त्याचे आयुष्य कालबाह्य झाले नसेल तर सर्व काही ठीक आहे.

// टोकन मिळवा जर (isset($_GET["token"]) && preg_match("/^(40)$/i", $_GET["token"])) ( $token = $_GET["टोकन" ] ; ) बाकी ( नवीन अपवाद ("टोकन वैध नाही.") टाका; ) // टोकन तपासा $query = $db->तयार करा("प्रलंबित_वापरकर्त्यांकडून tstamp निवडा = टोकन =?"); $query->execute(array($token)); $row = $query->fetch(PDO::FETCH_ASSOC); $query->closeCursor(); if ($row) ( extract($row); ) else ( फेक नवीन अपवाद ("टोकन वैध नाही."); ) // वापरकर्ता खाते सक्रिय करा // ... // डेटाबेस $query मधून टोकन काढून टाका = $db->तयार करा("प्रलंबित_वापरकर्त्यांकडून हटवा जेथे वापरकर्तानाव = ? आणि टोकन = ? आणि tstamp =?",); $query->execute(array($username, $token, $tstamp));

ज्यांचे आयुष्य कालबाह्य झाले आहे अशा टोकनसाठी आम्हाला चेक प्रदान करणे देखील आवश्यक आहे:

// 1 दिवस सेकंदात = 60 सेकंद * 60 मिनिटे * 24 तास $डेल्टा = 86400; // तपासा ($_SERVER["REQUEST_TIME"] - $tstamp > $delta) ( नवीन अपवाद टाका("टोकन आजीवन कालबाह्य झाले आहे."); ) // वापरकर्ता खाते सक्रिय करा // ...

अशा प्रकारे, आमच्याकडे दोन चेक असतील: एक टोकनच्या वैधतेसाठी, दुसरा त्याच्या अस्तित्वाच्या कालावधीसाठी.

तळ ओळ

ही पद्धत केवळ सक्रिय करण्यासाठी वापरली जाऊ शकत नाही खातीवापरकर्ते, परंतु इतर गरजांसाठी देखील: उदाहरणार्थ, काही संसाधन किंवा सेवेसाठी एक वेळ किंवा तात्पुरता प्रवेश प्रदान करणे.

या सर्वांच्या वर, तुम्ही एक स्क्रिप्ट तयार करू शकता जी तुम्ही कधीही न वापरलेली टोकन हटवेल. तुम्ही ही स्क्रिप्ट वेळोवेळी स्वतः चालवू शकता किंवा यासाठी क्रॉन वापरू शकता.

थीम सहसा कार्यक्षम नसतात, परंतु काहीवेळा आम्ही विकासकांना आमच्या थीममध्ये काही वैशिष्ट्ये लागू करणे आवश्यक आहे जेणेकरून ते थोडे अधिक चांगले आणि अधिक सोयीस्कर होईल.

या ट्युटोरियलमध्ये, आम्ही "प्लगइन टेरिटरी" हा शब्द एक्सप्लोर करू आणि थॉमस ग्रिफिन यांनी लिहिलेले एक विलक्षण साधन कसे वापरायचे ते देखील शिकू: TGM प्लगइन सक्रियकरण लायब्ररी.

थीम कार्यक्षमता: प्लगइन प्रदेश आक्रमण

थीम्स वर्डप्रेस वेबसाइटचे डिझाइन बदलण्यासाठी डिझाइन केल्या आहेत. तद्वतच, थीमने केवळ दृश्य पैलूला संबोधित केले पाहिजे. तथापि, आमच्या वर्डप्रेसच्या सुवर्णयुगात, प्लगइन विकासक सहसा समाविष्ट करतात कार्यात्मक वैशिष्ट्येजे तुम्हाला बाजारात स्पर्धात्मक राहण्याची परवानगी देतात.

हे प्लगइन प्रदेशात घुसखोरी आहे. आम्ही कोडचे काही कार्यात्मक विभाग म्हणून “प्लगइन प्रदेश” चा विचार करू शकतो. कोडचा कोणताही तुकडा जो तुमच्या साइटची कार्यक्षमता बदलतो तो प्लगइनच्या स्वरूपात असावा, जोपर्यंत वर्डप्रेस कोरमध्ये कोड तयार केला जात नाही.

मी याआधीच माझ्या एका लेखात “प्लगइन टेरिटरी:” साठी एक नियम तयार केला आहे.

जर एखादे वैशिष्ट्य साइटच्या व्हिज्युअल सादरीकरणाशी संबंधित असेल तर ते थीममध्ये समाविष्ट केले जावे; जर ते कार्यक्षमतेशी संबंधित असेल, तर ते स्वतंत्र प्लगइन म्हणून सादर केले जावे.

अगदी साधा नियम. लोक अजूनही त्यांच्या थीममध्ये फंक्शनल बिट्स कोड करण्याचा प्रयत्न करतात, परंतु थीम डिरेक्टरी (जसे की WordPress.org किंवा ThemeForest) "प्लगइन प्रदेश" मध्ये प्रवेश करणारी थीम स्वीकारत नाहीत. अशा प्रकारे, थीममध्ये कार्यक्षमता ऑफर करणे थोडे आव्हान बनले आहे.

सुदैवाने, एक सोपा उपाय आहे जो प्लगइन प्रदेश नियमाच्या विरोधात जात नाही.

TGM प्लगइन सक्रियकरण लायब्ररीचा परिचय

TGM प्लगइन सक्रियकरण सेट करत आहे

कोडच्या अगदी शेवटी दोन पॅरामीटर्ससह tgmpa() फंक्शनकडे लक्ष द्या. दुसरे पॅरामीटर $config व्हेरिएबल आहे, जे $plugins सारखे ॲरे देखील आहे. त्याच्या नावाप्रमाणे, तुम्ही हा ॲरे वापरून TGM प्लगइन सक्रियकरण लायब्ररी सानुकूलित करू शकता. व्हेरिएबल त्याच्या स्वतःच्या पर्यायांचा संच देखील स्वीकारतो:

  • id (स्ट्रिंग) - तुमच्या थीममधील TGM प्लगइन सक्रियकरण लायब्ररीसाठी अद्वितीय आयडी. हे खूप महत्वाचे आहे: इतर प्लगइन देखील TGM प्लगइन सक्रियकरण वापरत असल्यास, भिन्न आयडी संभाव्य संघर्ष टाळतील.
  • default_path (स्ट्रिंग) - तुमच्या थीममधील प्लगइनसाठी डीफॉल्ट परिपूर्ण मार्ग. एकदा तुम्ही ते स्थापित केल्यानंतर, तुम्ही तुमच्या प्लगइनसाठी स्त्रोत पॅरामीटर मूल्य म्हणून झिप फाइलचे नाव वापरू शकता.
  • मेनू (स्ट्रिंग) - प्लगइन स्थापना पृष्ठासाठी मेनू स्लग.
  • has_notices (बूलियन) - सत्य वर सेट केल्यास, आवश्यक/शिफारस केलेल्या प्लगइनसाठी प्रशासक सूचना जारी केल्या जातील.
  • डिसमिस करण्यायोग्य (बूलियन) - सत्य वर सेट केल्यास, वापरकर्ता सूचना "डिसमिस" करू शकतो.
  • dismiss_msg (स्ट्रिंग) - डिसमिस करण्यायोग्य पर्याय असत्य वर सेट केला असल्यास, हा संदेशप्रशासक सूचनेच्या वर दाखवले जाईल.
  • is_automatic (बूलियन) – सत्य वर सेट केल्यास, वापरकर्त्याने प्लगइन स्थापित करण्यास सहमती दिल्यानंतर ते सक्रिय केले जातील.
  • संदेश (स्ट्रिंग) - प्लगइन टेबलच्या आधी अतिरिक्त HTML आउटपुट.
  • स्ट्रिंग्स (ॲरे) – एक ॲरे ज्यामध्ये प्रदर्शित केले जाणारे संदेश समाविष्ट आहेत. तुम्ही त्यांना अनुवादित स्ट्रिंग म्हणून निर्दिष्ट करू शकता. सर्व संदेशांची संपूर्ण यादी पाहण्यासाठी example.php फाइल पहा.
"mytheme-tgmpa", // तुमचा अद्वितीय TGMPA आयडी "default_path" => get_stylesheet_directory() . "/lib/plugins/", // default absolute path "menu" => "mytheme-install-required-plugins", // menu slug "has_notices" => खरे, // प्रशासक सूचना दाखवा "डिसमिस करण्यायोग्य" => खोटे , // नोटिस डिसमिस करण्यायोग्य नाहीत "dismiss_msg" => "मला खरोखर, तुम्ही हे प्लगइन स्थापित करावेत, ठीक आहे?", // हा संदेश "is_automatic" => सत्य, // आपोआप आउटपुट होईल इंस्टॉलेशन नंतर प्लगइन सक्रिय करा "message" => "", // मेसेज आउटपुट करण्यासाठी प्लगइन टेबलच्या आधी "strings" => array(); // संदेश स्ट्रिंगचा ॲरे जो TGM प्लगइन सक्रियकरण वापरते; ?>

निष्कर्ष

तुम्ही बघू शकता, वर्डप्रेस थीममध्ये कार्यक्षमता ऑफर करणे शक्य आहे - तुम्हाला फक्त प्रथम वापरकर्त्यांबद्दल विचार करावा लागेल जे एका थीमवरून दुसऱ्या थीमवर स्विच करू शकतात. TGM प्लगइन एक्टिव्हेशन लायब्ररी हे करण्यासाठी खरोखर स्मार्ट मार्ग देते.

तुम्हाला काय वाटते या साधनाचे? तुम्ही ते कधी वापरले आहे का, भविष्यात ते वापरण्याची तुमची योजना आहे का? आपले विचार सामायिक करा!