2011-05-26 13 views
6

मैं ड्रॉप डाउन चयन मानों के साथ एक नया यूजरेटा फ़ील्ड कैसे बना सकता हूं?वर्डप्रेस: ​​उपयोगकर्ताओं के लिए एक नया usermeta फ़ील्ड बनाएं

मैं उन सभी नए उपयोगकर्ताओं के लिए सशर्त बयान बनाना चाहता हूं जो नए कस्टम फ़ील्ड के एक निश्चित मूल्य के साथ चाहते हैं।

उदाहरण के लिए,

नए क्षेत्र की जाएगी: स्वीकृत मूल्यों ड्रॉप डाउन कर रहे हैं: हाँ और नहीं

सशर्त बयान हाँ की स्वीकृत क्षेत्र मूल्य के साथ सभी उपयोगकर्ताओं पहचान लेंगे। फिर यह एक कोड पोस्ट करेगा।

मैं wp_get_current_user फ़ंक्शन() के साथ काम कर रहा हूं, जो वास्तव में मुझे चाहिए, लेकिन मुझे बस एक नया कस्टम usermeta फ़ील्ड चाहिए। उदाहरण में नया usermeta फ़ील्ड "artwork_approved" होगा।

उदाहरण:

wp_get_current_user(); 
if ($current_user->artwork_approved == 'Yes'){ 
    echo 'Thank you for approving your artwork!'; 
} 

इस के लिए कोई प्लगइन हो रहा है और मैं वास्तव में इस सुविधा की जरूरत है । मैं वास्तव में ड्रॉप डाउन विकल्पों के साथ एक नया usermeta बनाने पर कुछ सलाह की सराहना करता हूं।

* अद्यतन: "। कलाकृति स्वीकृत"

मैं रजिस्टर प्लस Redux इस्तेमाल किया एक नया usermeta क्षेत्र कहा जाता है, बनाने के लिए मैंने इसे "ड्रॉप" विकल्प "विकल्प" और "हां" के साथ एक ड्रॉप डाउन विकल्प बनाया है। कोई विकल्प डिफ़ॉल्ट के रूप में सेट नहीं है।

इसने "आर्टवर्क स्वीकृत" usermeta फ़ील्ड बनाया। मैं उपयोगकर्ता खातों का प्रबंधन करता हूं और या तो हां या नंबर चुनता हूं, इस नए यूसुमेटा फ़ील्ड के साथ, मैं एक फ़ंक्शन का उपयोग कर रहा हूं जो जांच करनी चाहिए कि वर्तमान उपयोगकर्ता के पास आर्टवर्क हां के मूल्य के साथ स्वीकृत है या नहीं। फिर यह एक निश्चित कोड दिखाया जाना चाहिए।

<?php global $current_user; get_currentuserinfo(); if ($current_user->artwork_approved == 'Yes') { ?> 

echo 'Your artwork is approved'; 

<?php } else { ?>   

echo 'Your artwork is not approved'; 

<?php } ?> 

लेकिन क्या हो रहा है यह अगर बयान के पहले भाग में पहचान नहीं कर रहा है:

यहाँ अगर नए usermeta क्षेत्र के साथ का उपयोग कर बयान इम है। अगर मैं अनुमोदित आर्टवर्क के साथ किसी भी खाते में लॉग इन करता हूं, तो अगर कथन केवल "अन्य" भाग दिखाता है, भले ही मेरे पास आर्टवर्क स्वीकृत के लिए विकल्प "हां" है।

मुझे नहीं पता कि यह हाँ विकल्प को क्यों पहचान नहीं रहा है क्योंकि मेरे पास यह बयान में है।

धन्यवाद

उत्तर

16

आप उपयोगकर्ता प्रोफ़ाइल कार्यों में हुक और एक नए क्षेत्र को जोड़ने के लिए एक सरल प्लगइन बना सकते हैं।

फॉर्म में फ़ील्ड जोड़ने के लिए आप show_user_profile और edit_user_profile क्रियाओं को हुक कर सकते हैं और फॉर्म फ़ील्ड HTML आउटपुट कर सकते हैं। नीचे ड्रॉप-डाउन की बजाय चेकबॉक्स का उपयोग करता है।

add_action('show_user_profile', 'my_user_profile_edit_action'); 
add_action('edit_user_profile', 'my_user_profile_edit_action'); 
function my_user_profile_edit_action($user) { 
    $checked = (isset($user->artwork_approved) && $user->artwork_approved) ? ' checked="checked"' : ''; 
?> 
    <h3>Other</h3> 
    <label for="artwork_approved"> 
    <input name="artwork_approved" type="checkbox" id="artwork_approved" value="1"<?php echo $checked; ?>> 
    Artwork approved 
    </label> 
<?php 
} 

तो फिर तुम, personal_options_update और edit_user_profile_update कार्यों में हुक अपने फ़ील्ड का मान मिलता है और उपयोगकर्ता मेटा के रूप में इस को बचाने की जरूरत।

add_action('personal_options_update', 'my_user_profile_update_action'); 
add_action('edit_user_profile_update', 'my_user_profile_update_action'); 
function my_user_profile_update_action($user_id) { 
    update_user_meta($user_id, 'artwork_approved', isset($_POST['artwork_approved'])); 
} 

आपकी स्थिति तब नीचे होगी।

if (get_user_meta($current_user->ID, 'artwork_approved', true)) { 
+0

धन्यवाद रिचर्ड। मुझे एक समाधान मिला जो कुछ हद तक काम कर रहा है ... मैं रजिस्टर प्लस रेडक्स प्लगइन का उपयोग कर रहा हूं, जो नया यूजरेटा बना सकता है। मैंने अपनी पोस्ट को अधिक जानकारी के साथ अपडेट किया है। मैं आपके इनपुट की सराहना करता हूं। आपका बहुत बहुत धन्यवाद! – gdinari

+0

धन्यवाद रिचर्ड आपका समाधान एक आकर्षण की तरह काम किया। एकमात्र समस्या जो मैं देखता हूं वह यह है कि जब मैं व्यवस्थापक अनुभाग में उपयोगकर्ता अनुमोदन के लिए बॉक्स को चेक करता हूं, पृष्ठ को अपडेट करने के बाद बॉक्स चेक नहीं किया जाता है। यदि हमारे कर्मचारियों में से एक उस ग्राहक को देखता है तो वे नहीं जानते होंगे कि वे अनुमोदित हैं या नहीं। तो अगर मैं बॉक्स को अनचेक (अनुमोदित) करना चाहता था तो मैं यह कैसे करूँगा? धन्यवाद – gdinari

+0

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

1

कोड के दूसरे खंड नहीं पढ़ चाहिए:

add_action('personal_options_update', 'my_user_profile_update_action'); 
add_action('edit_user_profile_update', 'my_user_profile_update_action'); 
function my_user_profile_update_action($user_id) { 
    update_user_meta($user_id, 'artwork_approved', $_POST['artwork_approved']); 
} 

मूल्य update_user_meta द्वारा बचाया $_POST['artwork_approved'] नहीं isset($_POST['artwork_approved']) है।

+0

अच्छा बिंदु, हालांकि मैं इस तरह के डेटा को स्वच्छ करने का सुझाव दूंगा: 'update_user_meta ($ user_id, 'artwork_approved', isset ($ _ POST ['artwork_approved'])? 1: 0);' – helgatheviking

+1

चूंकि यह चेकबॉक्स 'artwork_approved' का उपयोग कर रहा है। यदि यह अनचेक किया गया है तो $ _POST सरणी में दिखाई नहीं देगा। –

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