मेरे पास एक फ़ंक्शन है जो पोस्ट प्रकार पर एक कस्टम फ़ील्ड को परिभाषित करता है। कहते हैं कि क्षेत्र "उपशाखा" है।
जब पोस्ट बच जाती है, तो मैं इनपुट पर कुछ सत्यापन करना चाहता हूं, और यदि आवश्यक हो तो पोस्ट एडिट स्क्रीन पर एक त्रुटि संदेश प्रदर्शित करता हूं। कुछ इस तरह:
// Handle post updating
function wpse_update_post_custom_values($post_id, $post) {
// Do some checking...
if($_POST['subhead'] != 'value i expect') {
// Add an error here
$errors->add('oops', 'There was an error.');
}
return $errors;
}
add_action('save_post','wpse_update_post_custom_values',1,2);
मैं इसे save_post कार्रवाई पर हुक करने की कोशिश कर रहा हूं, लेकिन मैं यह नहीं पता लगा सकता कि त्रुटियों को कैसे संभालना है। फ़ंक्शन में पास की गई कोई त्रुटि ऑब्जेक्ट दिखाई नहीं देता है, और अगर मैं अपना खुद का WP_Error obj बनाता हूं और इसे वापस करता हूं, तो पोस्ट एडिट पेज पर जो भी मैकेनिज्म त्रुटियां करता है, उसका सम्मान नहीं किया जाता है।
वर्तमान में मेरे कस्टम मेटा बॉक्स के अंदर ऑन-पेज त्रुटि संदेश है, लेकिन यह आदर्श से कम है - मेरे पास सामान्य रूप से प्रदर्शित होने वाली WP जैसी बड़ी, लाल, अप-टू-टॉप त्रुटि है।
कोई विचार?
अद्यतन करें:
@ डेनिस के जवाब के आधार पर, मैंने कुछ अलग चीजों की कोशिश की। एक वैश्विक के रूप में त्रुटियों को संग्रहीत करने से काम नहीं चला, क्योंकि वर्डप्रेस save_post प्रक्रिया के दौरान एक रीडायरेक्ट करता है, जो आपको प्रदर्शित करने से पहले वैश्विक को मारता है।
मैंने उन्हें मेटा फ़ील्ड में संग्रहीत किया। इसके साथ समस्या यह है कि आपको उन्हें खाली करने की आवश्यकता है, या जब आप किसी अन्य पृष्ठ पर जाते हैं, तो वे दूर नहीं जाएंगे, इसलिए मुझे admin_footer से जुड़ा एक और फ़ंक्शन जोड़ना होगा जो त्रुटियों को ठीक करता है।
मुझे उम्मीद नहीं थी कि कुछ सामान्य (अपडेट करने वाली पोस्ट) के लिए त्रुटि से निपटने में यह क्लंकी होगा। क्या मुझे कुछ स्पष्ट याद आ रहा है या यह सबसे अच्छा तरीका है?
// Handle post updating
function wpse_5102_update_post_custom_values($post_id, $post) {
// To keep the errors in
$errors = false;
// Do some validation...
if($_POST['subhead'] != 'value i expect') {
// Add an error here
$errors .= 'whoops...there was an error.';
}
update_option('my_admin_errors', $errors);
return;
}
add_action('save_post','wpse_5102_update_post_custom_values',1,2);
// Display any errors
function wpse_5102_admin_notice_handler() {
$errors = get_option('my_admin_errors');
if($errors) {
echo '<div class="error"><p>' . $errors . '</p></div>';
}
}
add_action( 'admin_notices', 'wpse_5102_admin_notice_handler' );
// Clear any errors
function wpse_5102__clear_errors() {
update_option('my_admin_errors', false);
}
add_action( 'admin_footer', 'wpse_5102_clear_errors' );
update_option('my_admin_errors', false);
अंत के बयान के तुरंत बाद इसे चलाने के लिए थोड़ा अधिक कुशल होगा wpse_5102_admin_notice_handler()
?
admin_footer
हुक से छुटकारा पा सकते हैं यदि आप अपने नोटिस हैंडलर फ़ंक्शन के अंत में त्रुटियों को स्पष्ट करते हैं। चीजों को थोड़ा सरल करता है।