सामान्य सेटिंग्स पृष्ठ पर कई कस्टम फ़ील्ड जोड़ें


22

सामान्य सेटिंग में कुछ कस्टम फ़ील्ड जोड़ने के लिए मुझे क्या करना है। यह वह कोड है जो मैं उपयोग कर रहा हूं। यह ठीक काम करता है, लेकिन मैं सिर्फ यह समझ सकता हूं कि अधिक फ़ील्ड कैसे जोड़ें।

मैं अभी के लिए दो फ़ील्ड बनाना चाहूंगा, एक टेलिफ़ोन नंबर के लिए और दूसरा एड्रेस के लिए:

function register_fields()
{
    register_setting('general', 'my_first_field', 'esc_attr');
    add_settings_field('my_first_field', '<label for="my_first_field">'.__('My Field' , 'my_first_field' ).'</label>' , 'print_custom_field', 'general');
}

function print_custom_field()
{
    $value = get_option( 'my_first_field', '' );
    echo '<input type="text" id="my_first_field" name="my_first_field" value="' . $value . '" />';
}

add_filter('admin_init', 'register_fields');

जिस तरह से मैं कई क्षेत्रों के लिए काम करने में कामयाब रहा, वह सब कुछ नकल करना था।

तो यह इस तरह दिखेगा:

function register_fields()
{
    register_setting('general', 'my_first_field', 'esc_attr');
    add_settings_field('my_first_field', '<label for="my_first_field">'.__('My Field' , 'my_first_field' ).'</label>' , 'print_first_field', 'general');

    register_setting('general', 'my_second_field', 'esc_attr');
    add_settings_field('my_second_field', '<label for="my_second_field">'.__('My Field' , 'my_second_field' ).'</label>' , 'print_second_field', 'general');
}

function print_first_field()
{
    $value = get_option( 'my_first_field', '' );
    echo '<input type="text" id="my_first_field" name="my_first_field" value="' . $value . '" />';
}

function print_second_field()
{
    $value = get_option( 'my_second_field', '' );
    echo '<input type="text" id="my_second_field" name="my_second_field" value="' . $value . '" />';
}

add_filter('admin_init', 'register_fields');

लेकिन यह शायद ऐसा करने का सबसे अच्छा तरीका नहीं है, मैंने बनाने की कोशिश की, settings_sectionलेकिन यह सिर्फ काम नहीं किया या नहीं बचा है आदि इसकी बहुत भ्रामक है।

जवाबों:


26

वैसे दूसरा बिट कोड तकनीकी रूप से इसे करने का सही तरीका है। हालांकि, आप के अंत में add_settings_field()तर्क पारित कर सकते हैं।

कृपया वर्डप्रेस Add_Settings_Field फ़ंक्शन संदर्भ देखें। यह आपको यह समझने में मदद करेगा कि add_settings_field()फ़ंक्शन वास्तव में कैसे काम करता है।

अब, उस कहावत के साथ, आप अपने कॉलबैक के लिए एक 'साझा' फ़ंक्शन का उपयोग कर सकते हैं । जैसे कि मैं अपने विकल्प पृष्ठ में करता हूं जब मैं थीम विकसित करता हूं।

यहाँ एक उदाहरण है कि मैं इसे कैसे करता हूँ।

// My Example Fields
add_settings_field(  
    'tutorial_display_count',                      
    'Tutorial Display Count',               
    'ch_essentials_textbox_callback',   
    'ch_essentials_front_page_option',                     
    'ch_essentials_front_page',
    array(
        'tutorial_display_count' // $args for callback
    ) 
);
add_settings_field(  
    'blog_display_count',                      
    'Blog Display Count',               
    'ch_essentials_textbox_callback',   
    'ch_essentials_front_page_option',                     
    'ch_essentials_front_page',
    array(
        'blog_display_count'  // $args for callback
    ) 
);

// My Shared Callback
function ch_essentials_textbox_callback($args) { 

$options = get_option('ch_essentials_front_page_option'); 

echo '<input type="text" id="'  . $args[0] . '" name="ch_essentials_front_page_option['  . $args[0] . ']" value="' . $options[''  . $args[0] . ''] . '"></input>';

}

अपनी आवश्यकताओं को पूरा करने के लिए थोड़ा सा अनुकूलन करना होगा, लेकिन आपके कॉलबैक के लिए एक साझा कार्य करने से कोड के संदर्भ में बहुत सारी जगह बच जाएगी। इसके अलावा, आप इसे सही तरीके से कर रहे हैं।

--Edit--

ठीक है, यह वही है जो आपके लिए होना चाहिए .. बस आवश्यकतानुसार कोड को संशोधित करें, मैंने इसे मक्खी पर लिखा है .. मैंने इसे जांचने के लिए परीक्षण किया, और यह काम किया। आपको बस add_settings_fieldअपनी आवश्यकताओं के अनुरूप संशोधित करने की आवश्यकता है। यदि आपको अधिक जोड़ने की आवश्यकता है, तो बस कॉपी करें और एक पेस्ट करें और इसे संपादित करें। सुनिश्चित करें register_settingया यह काम नहीं करेगा।

add_action('admin_init', 'my_general_section');  
function my_general_section() {  
    add_settings_section(  
        'my_settings_section', // Section ID 
        'My Options Title', // Section Title
        'my_section_options_callback', // Callback
        'general' // What Page?  This makes the section show up on the General Settings Page
    );

    add_settings_field( // Option 1
        'option_1', // Option ID
        'Option 1', // Label
        'my_textbox_callback', // !important - This is where the args go!
        'general', // Page it will be displayed (General Settings)
        'my_settings_section', // Name of our section
        array( // The $args
            'option_1' // Should match Option ID
        )  
    ); 

    add_settings_field( // Option 2
        'option_2', // Option ID
        'Option 2', // Label
        'my_textbox_callback', // !important - This is where the args go!
        'general', // Page it will be displayed
        'my_settings_section', // Name of our section (General Settings)
        array( // The $args
            'option_2' // Should match Option ID
        )  
    ); 

    register_setting('general','option_1', 'esc_attr');
    register_setting('general','option_2', 'esc_attr');
}

function my_section_options_callback() { // Section Callback
    echo '<p>A little message on editing info</p>';  
}

function my_textbox_callback($args) {  // Textbox Callback
    $option = get_option($args[0]);
    echo '<input type="text" id="'. $args[0] .'" name="'. $args[0] .'" value="' . $option . '" />';
}

तो मुझे जो समझ में नहीं आया वह है add_settings_field () में 4th और 5th पैरामीटर। मुझे पता है कि पहला आईडी है, दूसरा नाम है, तीसरा इसे प्रदर्शित करने के लिए कॉलबैक है, लेकिन अगले लोगों के लिए क्या हैं? आपके पास उन दोनों के लिए ch_essentials_front_page_option है, मेरे पास एक ही स्थान पर केवल 'सामान्य' है, अगला खाली है और अंतिम अब आर्ग्स सरणी है। तो अब कॉलबैक में आपको उस मूल्य के साथ get_option है, लेकिन मुझे नहीं पता कि मेरे मामले में क्या रखा जाए।
रिचर्ड मिसेनकिन

2
संपादित किया गया है, कि आपको 100% जाना चाहिए। अगर आपको कोई समस्या या सवाल है तो मुझे बताएं। मैंने इस पर भारी टिप्पणी की।
मि। जस्टिन

@MrJusting बहुत बहुत धन्यवाद। मुझे वास्तव में यह आपकी प्रोफ़ाइल को देखने और आपके द्वारा उत्तर दिए गए एक खोज की जाँच करके, "कार्यान्वयन-टैब-पर-कस्टम-मेनू-पृष्ठ" पर काम करने में मिला। यह बहुत अच्छी तरह से टिप्पणी की गई थी, इसलिए तब मैंने अपने कोड की तुलना की और अंत में समझा कि यह कैसे काम करता है। मेरे लिए पृष्ठ और अनुभाग पैरामीटर भ्रामक थे, हालांकि मैं पृष्ठ के अनुभाग की तरह था न कि सेटिंग्स का अनुभाग। तो अब मैंने दोनों को एक साथ जोड़ दिया और $ args में एक और मूल्य जोड़ दिया, इसलिए पहला फ़ील्ड आईडी है और दूसरा वर्णन है, और फिर कॉलबैक फ़ंक्शन में एक और पंक्ति जोड़ दी जो args के साथ विवरण को प्रतिध्वनित करने के लिए है [1] :)
रिचर्ड Mišenčíva

महान, मुझे खुशी है कि आपने इसे समझ लिया है, यदि आपके कोई प्रश्न हैं तो मुझे बताएं।
श्री ज्यूस्टिन

मुझे लगता है कि बीमार अब एक अलग मेनू पेज बनाने की कोशिश करते हैं और वहां विकल्पों को जोड़ते हैं, क्योंकि सामान्य तौर पर और सबसे नीचे अपनी तरह का खोया हुआ। मैं आपको
बताऊंगा

0

बेहतर तरीका एक वर्डप्रेस विकल्प प्लगइन्स का उपयोग करना है। सर्वश्रेष्ठ में से एक उन्नत कस्टम फ़ील्ड है।

http://www.advancedcustomfields.com/

यदि आप एक विकल्प पेज एडऑन खरीदते हैं, तो आप बहुत सारी सुविधाओं के साथ एक असीमित विकल्प पेज बना सकते हैं। कृपया एक वीडियो देखें

http://www.advancedcustomfields.com/add-ons/options-page/

बहुत उपयोगी प्लगइन और addon।


3
मैं बस कुछ फ़ील्ड जोड़ना चाहता हूं, इसलिए इसके लिए प्लगइन केवल मेरे लिए एक ओवरकिल होगा, लेकिन धन्यवाद।
रिचर्ड मिचेनिक

8
यह उल्लेख करने के लिए नहीं हल करता है कि ओपी क्या चाहता था, जो सामान्य सेटिंग्स में फ़ील्ड जोड़ना था। AFAIK, ACF आपको फ़ील्ड्स को सामान्य सेटिंग्स को जोड़ने की अनुमति नहीं देता है।
एनडब्ल्यू टेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.