AWARE व्हिसलर व्हिसलर, कनाडा के प्राकृतिक पर्यावरण की रक्षा के लिए प्रतिबद्ध एक चैरिटी है। यह संगठन इस साल अपनी 30वीं वर्षगांठ मना रहा है और इस अवसर को 30 फॉर 30 फ़ंडरेज़र लॉन्च करके मना रहा है।
30 फॉर 30 फ़ंडरेज़र का लक्ष्य $60,000 जुटाना है, जिसमें $30,000 व्यवसायों से और $30,000 व्यक्तिगत दान से जुटाए जाएंगे।
AWARE इस अभियान को चलाने के लिए Charitable के अभियान-संचालित फ़ंडरेज़िंग दृष्टिकोण का उपयोग कर रहा है, जिसमें दो व्यक्तिगत फ़ंडरेज़िंग अभियान स्थापित किए गए हैं: एक व्यवसायों के लिए, और एक व्यक्तियों के लिए।
चुनौती
बेशक, इस तरह के अनोखे अभियानों की अनोखी ज़रूरतें होती हैं, और 30 फॉर 30 फ़ंडरेज़र भी इसका अपवाद नहीं है।
चूंकि दो फ़ंडरेज़िंग अभियानों में से एक विशेष रूप से व्यवसायों से दान प्राप्त करने पर केंद्रित है, इसलिए उस अभियान के दान फ़ॉर्म में एक कंपनी का नाम फ़ील्ड आवश्यक है। साथ ही, जब साइट पर दानदाताओं को दिखाया जाता है (दानदाता शॉर्टकोड या विजेट का उपयोग करके), तो दान करने वाले व्यक्ति का नाम नहीं, बल्कि कंपनी का नाम दिखाया जाना चाहिए।
सौभाग्य से, Charitable का लचीलापन AWARE की ज़रूरतों के लिए आदर्श रूप से उपयुक्त है। आइए देखें कैसे।
चरण 1. "कंपनी का नाम" फ़ील्ड जोड़ें
सबसे पहले हमें दान फ़ील्ड API का उपयोग करके एक नया दान फ़ील्ड बनाना होगा।
आइए इसे प्राप्त करने के लिए आवश्यक कोड पर एक नज़र डालें:
/**
* STEP 1: Register the "Company Name" Donation Field.
*
* On the `init` hook, we create a new Donation Field. It has a
* key of `company_name` (this is how we will reference it later),
* and it's set up as a required field in the donation form, shown
* after the `last_name` field.
*/
add_action( 'init', function() {
/**
* Add a "Company Name" field.
*/
$field = new Charitable_Donation_Field(
'company_name',
[
'label' => 'Company Name',
'data_type' => 'user',
'donation_form' => [
'show_after' => 'last_name',
'required' => true,
],
'admin_form' => true,
'show_in_meta' => true,
'show_in_export' => true,
'email_tag' => [
'description' => 'The company name',
],
]
);
/**
* Register the field.
*/
charitable()->donation_fields()->register_field( $field );
}, 100 );
यहां कुछ चीजें हो रही हैं। सबसे पहले, बिल्कुल ऊपर, हम init हुक पर चलने वाला एक फ़ंक्शन सेट कर रहे हैं। जब भी आप एक नया दान फ़ील्ड पंजीकृत करना चाहते हैं तो यह उपयोग करने के लिए सबसे अच्छा हुक है।
हमारे फ़ंक्शन के अंदर, हम Charitable_Donation_Field ऑब्जेक्ट के साथ एक नया दान फ़ील्ड बनाते हैं। आइए उस हिस्से पर करीब से नज़र डालें:
$field = new Charitable_Donation_Field(
'company_name',
[
'label' => 'Company Name',
'data_type' => 'user',
'donation_form' => [
'show_after' => 'last_name',
'required' => true,
],
'admin_form' => true,
'show_in_meta' => true,
'show_in_export' => true,
'email_tag' => [
'description' => 'The company name',
],
]
);
यहां हम company_name की कुंजी के साथ एक फ़ील्ड बना रहे हैं (हमें इसकी बाद में आवश्यकता होगी)। हमने एक लेबल सेट किया है, इसे एक उपयोगकर्ता फ़ील्ड के रूप में परिभाषित किया है, और यह कैसे दान फ़ॉर्म में दिखाई देना चाहिए, इसके लिए कुछ बुनियादी नियम निर्धारित किए हैं: last_name फ़ील्ड के ठीक बाद और एक आवश्यक फ़ील्ड के रूप में।
हमने इसे एडमिन दान फ़ॉर्म, दान मेटा और दान निर्यात फ़ाइल में दिखाने के लिए भी सेट किया है। हमने Charitable को इसके लिए एक ईमेल टैग बनाने के लिए भी कहा है, ताकि हम इसे अपने दान रसीद ईमेल में उपयोग कर सकें।
अंत में, हम इस फ़ील्ड को दान फ़ील्ड API के साथ पंजीकृत करते हैं:
charitable()->donation_fields()->register_field( $field );
चरण 2. "कंपनी का नाम" फ़ील्ड केवल एक अभियान पर दिखाएं
डिफ़ॉल्ट रूप से, जब आप एक दान फ़ील्ड सेट करते हैं, तो यह हर अभियान के दान फ़ॉर्म में दिखाई देगा। हालांकि, "30 फॉर 30" अभियान के लिए, AWARE केवल यह फ़ील्ड व्यवसाय फ़ंडरेज़र के दान फ़ॉर्म में दिखाना चाहता है।
हम इसे इस प्रकार प्राप्त करते हैं:
/**
* STEP 2: Only show the field on a specific campaign.
*
* We only want the field to show up on a single campaign's
* form, so we *remove* it from all other campaigns' donation
* forms.
*/
add_filter( 'charitable_donation_form_user_fields', function( $fields, Charitable_Donation_Form $form ) {
/**
* Check the campaign ID of the donation form being
* shown. If it isn't the one where we want the field,
* remove the field using the unset() function.
*/
if ( 123 != $form->get_campaign()->ID ) {
unset( $fields['company_name'] );
}
return $fields;
}, 10, 2 );
जिस तरह से हम इस समस्या को हल करते हैं, वह है company_name फ़ील्ड को *हटाना* जब हम व्यवसाय अभियान के दान फ़ॉर्म को *नहीं* दिखा रहे हों। सारा जादू यहीं होता है:
if ( 123 != $form->get_campaign()->ID ) {
unset( $fields['company_name'] );
}
इस मामले में, हम कल्पना कर रहे हैं कि बिजनेस अभियान की आईडी 123 है। इसलिए जब हम किसी विशेष फॉर्म में फ़ील्ड देख रहे होते हैं, तो हम फॉर्म के अभियान की आईडी की जांच करते हैं, और यदि यह 123 नहीं है, तो हम अपने फ़ील्ड को हटाने के लिए unset() फ़ंक्शन का उपयोग करते हैं, इसे company_name की कुंजी से संदर्भित करते हुए, जिसे हमने चरण 1 में सेट किया था।
चरण 3. डोनर्स शॉर्टकोड या विजेट में डोनर का नाम कस्टमाइज़ करें
अब जब हमने अपना कंपनी का नाम फ़ील्ड जोड़ लिया है, तो बिजनेस अभियान को दान दिखाते समय डोनर के पहले और अंतिम नाम के बजाय बस यही उपयोग करना बाकी है।
आइए कोड देखें:
/**
* STEP 3: Use the company name for the donor name.
*
* When showing the donor name for a particular donation,
* check if the donation was to the campaign with our
* Company Name field. If it was, show the Company Name
* instead of the individual's name.
*/
add_filter( 'charitable_donor_loop_donor_name', function( $name, $args ) {
/**
* Get the Donor object from the argument array.
*/
$donor = $args['donor'];
/**
* Check if there is a Donation object associated
* with this Donor.
*/
$donation = $donor->get_donation();
if ( ! $donation ) {
return $name;
}
/**
* Get the campaign that received the donation.
*/
$campaign_id = current( $donation->get_campaign_donations() )->campaign_id;
/**
* If this was a donation to our campaign,
* let's change the donor name.
*/
if ( 123 == $campaign_id ) {
$name = $donation->get( 'company_name' );
}
return $name;
}, 15, 2 );
सबसे पहले, ध्यान दें कि यह charitable_donor_loop_donor_name हुक पर कॉल किए गए फ़ंक्शन के रूप में सेट अप है। हम इस हुक का उपयोग करते हैं क्योंकि यह तब दिखाया जाता है जब भी डोनर्स विजेट या शॉर्टकोड के साथ डोनर्स की सूची दिखाई जाती है।
फ़ंक्शन के अंदर, हम पहले $args पैरामीटर से Charitable_Donor ऑब्जेक्ट प्राप्त करते हैं। फिर हम $donor->get_donation() विधि के माध्यम से Charitable_Donation ऑब्जेक्ट प्राप्त करते हैं:
/**
* Check if there is a Donation object associated
* with this Donor.
*/
$donation = $donor->get_donation();
if ( ! $donation ) {
return $name;
}
आप सोच सकते हैं कि हम क्यों जांचते हैं कि $donation सेट है या नहीं। इसका कारण यह है कि कभी-कभी, Charitable_Donor किसी विशिष्ट दान के साथ सेट अप नहीं होता है। ऐसा ही एक उदाहरण तब होता है जब डोनर्स विजेट/शॉर्टकोड को एक ही डोनर द्वारा कई दान को एक में समूहित करने के लिए सेट किया जाता है - उस मामले में, कोई Charitable_Donation ऑब्जेक्ट नहीं बुलाया जाता है, और हम केवल डोनर का नाम दिखाएंगे।
इसलिए, इस दृष्टिकोण की एक महत्वपूर्ण चेतावनी यह है कि यह केवल तभी काम करेगा जब डोनर्स विजेट/शॉर्टकोड को एक ही व्यक्ति द्वारा कई दान को समूहित करने के बजाय प्रत्येक दान को व्यक्तिगत रूप से दिखाने के लिए सेट किया गया हो।
आगे बढ़ते हुए, हम यह पता लगाने के लिए Charitable_Donation ऑब्जेक्ट का उपयोग करते हैं कि किस अभियान को दान दिया गया था, और जांचते हैं कि क्या यह हमारा बिजनेस अभियान है (आईडी 123 वाला):
/**
* Get the campaign that received the donation.
*/
$campaign_id = current( $donation->get_campaign_donations() )->campaign_id;
/**
* If this was a donation to our campaign,
* let's change the donor name.
*/
if ( 123 == $campaign_id ) {
$name = $donation->get( 'company_name' );
}
यह अंतिम भाग बस यह जांचता है कि $campaign_id 123 है। यदि यह है, तो हम कंपनी का नाम इस प्रकार प्राप्त करते हैं:
$donation->get( 'company_name' );
ध्यान दें कि company_name उस दान फ़ील्ड की कुंजी से मेल खाता है जिसे हमने चरण 1 में पंजीकृत किया था।
और इसके साथ, हम सब कर चुके हैं!
संपूर्ण समाधान
आप हमारे गिटहब कोड लाइब्रेरी में एक ही स्थान पर एक साथ रखे गए सभी कोड देख सकते हैं:
इसे क्रियान्वित देखने के लिए - और यदि आप AWARE Whistler द्वारा किए गए महत्वपूर्ण कार्यों के लिए अपना समर्थन दिखाना चाहते हैं - तो उनकी वेबसाइट पर 30 for 30 Fundraiser पृष्ठ पर जाएं।
अंतिम शब्द
यदि आपने इस ट्यूटोरियल का आनंद लिया और चाहते हैं कि हम किसी भिन्न विषय पर एक लिखें, तो हमें बताएं! आप हमारे Support पृष्ठ पर फ़ॉर्म भरकर ईमेल के माध्यम से हमसे संपर्क कर सकते हैं, या नीचे एक टिप्पणी छोड़ सकते हैं।




एक उत्तर छोड़ें