क्या मुझे अपने कस्टम पोस्ट प्रकार व्यवस्थापक में जोड़ने वाले प्रत्येक मेटा बॉक्स के लिए एक गैर-फ़ील्ड की आवश्यकता है?


16

मैं वर्तमान में अपने कस्टम पोस्ट प्रकार के व्यवस्थापक पृष्ठ पर काम कर रहा हूं, और मैं यह तय करने पर अड़ गया हूं कि दूसरे मेटाबॉक्स के लिए फिर से एक नॉन फील्ड जोड़ना है या नहीं। मैं कस्टम पोस्ट प्रकारों के लिए बहुत नया हूं, और इस बारे में ऑनलाइन खोज वास्तव में कई परिणाम नहीं देता है।

कोई विचार? धन्यवाद।

जवाबों:


13

मैं ऐसा करने की सलाह दूंगा।

आपके पास डेटा की उत्पत्ति और उपयोगकर्ता के इरादे की जांच करने के लिए आपका खुद का नॉन होना चाहिए। यदि आपके पास मेटाबॉक्स के लिए सिर्फ एक ही नॉनस है - तो आप समस्याओं में भाग लेते हैं यदि उस मेटाबॉक्स को हटा दिया जाता है (छिपे हुए समान नहीं)। यदि हटाए गए दूसरे मेटाबॉक्स (या कम से कम) को कभी नहीं बचाना चाहिए क्योंकि गैर को लंबे समय तक भेजा जाता है।

निश्चित रूप से सुरक्षा के दृष्टिकोण से, एक दूसरे नॉनस द्वारा कुछ भी नहीं जोड़ा जाता है - जब तक आप कभी केवल एक मेटाबॉक्स को अपडेट करने की इच्छा नहीं करते हैं और दूसरे को नहीं: गैर-कार्रवाई के लिए अद्वितीय होना चाहिए


संपादित करें

जैसा कि बताया गया है कि पोस्ट एडिट स्क्रीन के लिए केवल एक फॉर्म है। तो, सिद्धांत रूप में, आपको केवल एक गैर-फ़ील्ड की आवश्यकता होती है जिसके साथ कार्रवाई और डेटा की उत्पत्ति को मान्य करना है। हालाँकि, जब से मेटाबॉक्स को हटाया जा सकता है - केवल एक मेटाबॉक्स में एक नॉन फील्ड होने से इस बात की कोई गारंटी नहीं है कि नॉनस वहाँ मौजूद रहेगा। प्रत्येक मेटाबॉक्स में एक नॉन फील्ड को रखकर आप जांच सकते हैं कि किसी मेटाबोक्स से डेटा भेजा गया है (और वास्तव में जहां से आपको लगता है कि वह है) किसी भी डेटा को संसाधित करने से पहले। उदाहरण के लिए:

save_post_call_back($post_id){

  //Check this is not an auto-save route

  if(nonce of metabox1 present and valid){
     //Process data from metabox1
  }else{
    //Either metabox removed - or invalid nonce. Take no action.
  }

  if(nonce of metabox2 present and valid){
     //Process data from metabox2
  }else{
    //Either metabox removed - or invalid nonce. Take no action.
  }

}

नामनॉन फ़ील्ड मेटाबोक्स के लिए अद्वितीय होना चाहिए (और अन्य प्लग के रूप में मौजूद किसी भी अन्य नॉन के साथ टकराव नहीं होना चाहिए)।

गैर- मूल्य कार्रवाई के लिए अद्वितीय होना चाहिए (और इसमें आम तौर पर डेटा की उत्पत्ति शामिल होनी चाहिए (उदाहरण के लिए संपादित करें-पोस्ट त्वरित-संपादित के विपरीत)। मैं आम तौर पर पोस्ट आईडी भी शामिल करता हूं।


हम्म। लेकिन <form>व्यवस्थापक पृष्ठ पर केवल एक टैग है। क्या नॉन फील्ड फॉर्म के लिए यूनिक होना चाहिए या नहीं? tia, @Stephen
Ana Ban

हां, इसलिए गैर- नाम नाम मेटाबोक्स के लिए अद्वितीय होना चाहिए ताकि आप प्रत्येक मेटाबोक्स के लिए इसकी जांच कर सकें। गैर-मूल्य प्रदर्शन की गई क्रिया और डेटा की उत्पत्ति के लिए अद्वितीय होना चाहिए (जैसे 'त्वरित संपादन' और सामान्य संपादन स्क्रीन दोनों save_postकार्रवाई को ट्रिगर करते हैं )।
स्टीफन हैरिस

अद्यतन जवाब उम्मीद है कि मैं क्या कह रहा हूँ स्पष्ट करने के लिए :)
स्टीफन हैरिस

बात 1) है क्योंकि पूरी एडिट स्क्रीन के लिए केवल एक फॉर्म-टैग है और 2) इसमें स्वचालित रूप से एक नॉन जोड़ा गया है। आपको और अधिक क्यों जोड़ना होगा? यह हमेशा कोई फर्क नहीं पड़ता है कि क्या कोई फर्क नहीं पड़ता ... मैंने अपने उत्तर में यह बताया और लोगों को धन्यवाद दिया, धन्यवाद ... मेरा उद्देश्य सामग्री या मेटा डेटा जैसे पेज को संपादित करना है। एक गैर क्षेत्र ... इसके अलावा जब मैंने अधिक जोड़ने की कोशिश की तो यह कई मेटा-बॉक्स के साथ भी काम नहीं करता है !!
OZZIE

1
मेरा जवाब देखिए। save_postविभिन्न संदर्भों से बुलाया जा सकता है, इसलिए एक गैर की गारंटी नहीं है। यह जांचने का एक सुविधाजनक तरीका भी है कि आपके कॉलबैक में वास्तव में कुछ करना है। कई गैर जोड़ते समय, अद्वितीय नामों का उपयोग करें। यह वास्तव में कारगर है।
स्टीफन हैरिस

5

आप सबमिट बॉक्स को भी हुक कर सकते हैं जो कि गैर-फ़ील्ड को इसमें जोड़ने से कभी भी गायब नहीं होता है

add_action( 'post_submitbox_start', 'theme_submitdiv_extra' );
function theme_submitdiv_extra()
{
  wp_nonce_field( 'theme_meta_box_nonce', 'meta_box_nonce' );
}

फिर, अपने save_post कार्रवाई में:

if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'theme_meta_box_nonce' ) ) return;

1

गैर-फ़ील्ड का उपयोग यह प्रमाणित करने के लिए किया जाता है कि फ़ॉर्म की सामग्री वर्तमान साइट पर स्थान से आई थी और कहीं और नहीं।

कोडेक्स: wp_nonce_field

प्रति प्रपत्र केवल एक गैर-फ़ील्ड की आवश्यकता होती है, अधिक उपयोग करें जो मेरे लिए समझ में नहीं आता है।

हो सकता है कि आप जाँच कर सकें और check_admin_referer () का उपयोग सुनिश्चित कर सकें कि आपका अनुरोध किसी व्यवस्थापक पृष्ठ से है


-1

WP 3.5.2 में पूरे एडिट पेज को एक फॉर्म-टैग में लपेटा जाता है, इसलिए आपको अपना फॉर्म-टैग नहीं जोड़ना चाहिए !! अगर अभी भी ऐसा करते हैं और एक और अलग कस्टम मेटा बॉक्स जोड़ने की कोशिश करते हैं, तो यह बचत करते समय विफल हो जाएगा और जब आप बचत करने की कोशिश कर रहे हों तो केवल आपको wp-admin घर ले जाना चाहिए !!

इसके अलावा NONCE फ़ील्ड को न जोड़ें क्योंकि या तो केवल एक प्रति प्रपत्र माना जाता है (यह भी इसे बना सकता है !!) और पृष्ठ संपादित पहले से ही एक गैर फ़ील्ड है!

संपादित करें:

बात 1) है क्योंकि पूरी एडिट स्क्रीन के लिए केवल एक फॉर्म-टैग है , जैसा कि सही उत्तर लेखक ने स्वीकार किया है, और 2) इसमें स्वचालित रूप से एक नॉन जोड़ा गया है। आपको और अधिक क्यों जोड़ना होगा? यह हमेशा गैर क्या होगा कोई फर्क नहीं पड़ता ...

आशय मेरे विचार में संपादित करने के लिए सामग्री या मेटा डेटा से पेज है जैसे। एक गैर क्षेत्र ... इसके अलावा जब मैंने अधिक जोड़ने की कोशिश की तो यह कई मेटा-बॉक्स के साथ भी काम नहीं करता है !! एक काम करेगा और दूसरा विफल हो जाएगा और केवल उपयोगकर्ता को wp-admin होम में रीडायरेक्ट करेगा!


आपने दो प्रश्नों पर एक ही उत्तर पोस्ट किया है, क्या यह आकस्मिक था? आप दोनों में से किसका जवाब देने का मतलब था?
दुर्लभ

क्षमा करें आकस्मिक, यह एक। यदि आप wp 3.6 में फॉर्म-टैग के साथ जोड़े गए मेटा बॉक्स के फायरबग या क्रोम व्यू कंपोनेंट का उपयोग करते हैं तो यह पोस्ट के लिए पूरे फॉर्म में एक लिपटे हुए स्वचालित रूप से हटा दिया जाता है। तो यह गलत कैसे है? फिर आप कई गैर-क्षेत्रों को क्यों जोड़ेंगे?
OZZIE

इसे आज़माएँ और आप देखेंगे
OZZIE
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.