2012-04-26 13 views
16

एक वर्डप्रेस एकाधिक स्थापना में मैं अनुरूपण कर रहा हूँ, मैं जोवर्डप्रेस + मल्टीसाइट: नेटवर्क एडमिनिस्ट्रेशन में नया साइट फॉर्म जोड़ने के लिए कस्टम ब्लॉग विकल्प कैसे जोड़ें?

Network Admin > Sites > Add New

पर स्थित है नए ब्लॉग साइटों को बनाने के लिए प्रवेश फार्म के लिए एक साधारण पाठ क्षेत्र जोड़ने की जरूरत है, स्वाभाविक रूप से मैं इस क्षेत्र की जरूरत है पाने के लिए उस फॉर्म से अन्य मेटा डेटा के साथ {new_blog_prefix}_options तालिका में सहेजा गया।

मैं इसे पूरा करने के लिए सबसे सरल, सबसे सरल, और/या "सही तरीका" (यानी वर्डप्रेस वे) के लिए विशेष रूप से रूचि रखता हूं, लेकिन मैं द वे दैट वर्क्स ™ के लिए बस जाऊंगा! मेरे अनुसंधान के क्षेत्र में

अब तक मैं का सामना किया है कई मृत-समाप्त होता है:

  • सेटिंग API - [WP Codex]

    जहां तक ​​मेरा बता सकते हैं, सेटिंग API (क) नेटवर्क व्यवस्थापक अनुभाग के लिए काम नहीं कर सकता है (हालांकि यह WP के हाल के संस्करण में बदल सकता है); इसके अलावा, (बी) ऐसा लगता है कि यह आपको केवल डैशबोर्ड के Settings अनुभाग में स्क्रीन जोड़ने/संशोधित करने देता है।

  • wpmu_options हुक - [Hooks DB]

    नेटवर्क सेटिंग्स स्क्रीन करने के लिए विकल्पों को जोड़ने के लिए विशेष रूप से एक हुक होने के लिए लगता है।

  • add_site_option/add_blog_option - [WP Codex]

    निकटतम मैं मिल सकता है; ऐसा लगता है कि साइट-विशिष्ट विकल्पों को {blogsite_prefix}_options तालिका में जोड़ने की अनुमति है, लेकिन फिर भी व्यवस्थापक फ़ॉर्म में विकल्प जोड़ने में सहायता नहीं करता है।

तो ... कोई पासा नहीं। किसी भी मदद की सराहना की है!

उत्तर

27

यदि आप 'नई साइट जोड़ें' पृष्ठ के source code पर देखते हैं, तो आप देख सकते हैं कि वर्डप्रेस इस उद्देश्य के लिए एक हुक प्रदान नहीं करता है। बेशक, एक हुक खुद को जोड़ना संभव होगा, लेकिन यह आमतौर पर वर्डप्रेस कोर को संपादित करने के लिए खराब अभ्यास है।

हालांकि, एक बार सबमिट किया गया और सभी जानकारी मौजूद है, पृष्ठ wpmu_create_blog() फ़ंक्शन को कॉल करता है। इस बिंदु ब्लॉग पहले से ही बनाई गई है पर

do_action('wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta); 

: इस समारोह में एक हुक कहा जाता है, अर्थात् कार्रवाई wpmu_new_blog है। हालांकि, हम अभी भी यह पता लगा सकते हैं कि इस क्रिया पर हुक करके और इसे डेटाबेस में सहेजकर एक फ़ील्ड सबमिट किया गया था या नहीं। हम निम्नलिखित में हमारी प्लगइन फ़ाइल (या टेम्पलेट) में जोड़ते हैं:

function add_new_blog_field($blog_id, $user_id, $domain, $path, $site_id, $meta) { 

    // Make sure the user can perform this action and the request came from the correct page. 

    switch_to_blog($blog_id); 

    // Use a default value here if the field was not submitted. 
    $new_field_value = 'default'; 

    if (!empty($_POST['blog']['new_field'])) 
     $new_field_value = $_POST['blog']['new_field']; 

    // save option into the database 
    update_option('new_field', $new_field_value); 

    restore_current_blog(); 
} 

add_action('wpmu_new_blog', 'add_new_blog_field'); 

पृष्ठ पर फ़ील्ड प्रदर्शित करने के लिए, आप एक जावास्क्रिप्ट दृष्टिकोण का उपयोग कर सकते हैं।आप एक जावास्क्रिप्ट फ़ाइल जोड़ते हैं, पूरी तरह से 'नई साइट जोड़ें' पृष्ठ पर, और पृष्ठ के लोड पर आप पृष्ठ पर सही स्थिति में फ़ील्ड डालते हैं। आपको 'ब्लॉग [new_field]' नाम के साथ एक इनपुट फ़ील्ड जोड़ना चाहिए। हम निम्नलिखित JavaScript फ़ाइल जो, एक बार लोड बनाते हैं, 'जोड़ें नई साइट' पृष्ठ के लिए एक नया क्षेत्र को जोड़ता है: 'जोड़ें नई साइट' पृष्ठ पर

(function($) { 
    $(document).ready(function() { 
     $('<tr class="form-field form-required"></tr>').append(
      $('<th scope="row">New field</th>') 
     ).append(
      $('<td></td>').append(
       $('<input class="regular-text" type="text" title="New Field" name="blog[new_field]">') 
      ).append(
       $('<p>Explanation about your new field</p>') 
      ) 
     ).insertAfter('#wpbody-content table tr:eq(2)'); 
    }); 
})(jQuery); 

अब केवल एक चीज है करने के लिए छोड़ दिया है इस फ़ाइल में शामिल है , अपने प्लगइन फ़ाइल को यह जोड़कर:

// Only add the script for the page site-new.php (the page hook). 
add_action("admin_print_scripts-site-new.php", 'my_admin_scripts'); 

function my_admin_scripts() { 
    wp_register_script('yourScript', plugins_url('js/yourScript.js', __FILE__)); 
    wp_enqueue_script('yourScript'); 
} 

आगे सुझाव हो सकता है, अपनी आवश्यकताओं पर निर्भर करता है: add_settings_field, का उपयोग कर अपने सामान्य सेटिंग पृष्ठ में एक इनपुट फ़ील्ड जोड़ें इस तरह के एक उपयोगकर्ता इसे बाद में (और शायद ही संपादित कर सकते हैं कि अगर यह इस क्षेत्र के लिए डिफ़ॉल्ट सेटिंग है)। ए 'आप बाद में इस क्षेत्र को बदल नहीं सकते' दृष्टिकोण।

मुझे उम्मीद है कि यह आपकी मदद की ज़रूरत है।

+1

धन्यवाद, यह वास्तव में एक महान जवाब है! एक +100 के योग्य :) –

+0

बहुत अच्छा, लेकिन एक छोटा सा परिवर्तन: 'अगर (! खाली ($ _ पोस्ट [' ब्लॉग '] [' new_field ']) $ new_field_value = $ _POST [' ब्लॉग '] [' new_field ']; 'के लिए' if (! isset ($ _ POST [' ब्लॉग '] [' new_field '])) झूठी वापसी; '... new_field के खाली मूल्य पर विचार करें, जिसे सही मान – Mariyo

+1

के रूप में स्वीकार किया जा सकता है WP 4.5, "action_site_new_form" नामक साइट-new.php के फ़ॉर्म टैग के अंदर एक एक्शन हुक मौजूद है। – Berend

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