เพิ่มฟิลด์ที่กำหนดเองหลายรายการในหน้าการตั้งค่าทั่วไป


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()คุณสามารถผ่านการโต้แย้ง

โปรดดูการอ้างอิงฟังก์ชั่นWordPress 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 . '" />';
}

ดังนั้นสิ่งที่ฉันไม่เข้าใจคือพารามิเตอร์ที่ 4 และ 5 ใน add_settings_field () ฉันรู้ว่าคนแรกคือ ID ที่สองคือชื่อที่สามคือโทรกลับเพื่อแสดง แต่คนต่อไปคืออะไร คุณมี ch_essentials_front_page_option สำหรับทั้งคู่ฉันมี 'ทั่วไป' ในที่เดียวกันอันถัดไปว่างเปล่าและอันสุดท้ายเป็นแถว args ตอนนี้ในการติดต่อกลับคุณมี get_option ด้วยค่านั้น แต่ฉันไม่รู้ว่าจะใส่อะไรไว้ในกระเป๋าของฉัน
Richard Mišenčík

2
แก้ไขเสร็จแล้วซึ่งจะทำให้คุณไปได้ 100% แจ้งให้เราทราบหากคุณมีปัญหาหรือข้อสงสัย ฉันแสดงความคิดเห็นอย่างหนัก
MrJustin

@MrJusting ขอบคุณมาก ฉันทำให้มันทำงานได้โดยดูที่โปรไฟล์ของคุณและตรวจสอบภารกิจที่คุณตอบว่า "การนำแท็บไปใช้กับหน้าเมนูกำหนดเอง" มันเป็นความเห็นที่ดีมากดังนั้นฉันจึงเปรียบเทียบรหัสของฉันและในที่สุดก็เข้าใจว่ามันทำงานอย่างไร สำหรับฉันพารามิเตอร์ของหน้าและส่วนทำให้ฉันสับสนแม้ว่าฉันจะเป็นเหมือนส่วนของหน้าและไม่ใช่ส่วนของการตั้งค่า ดังนั้นตอนนี้ฉันรวมทั้งสองเข้าด้วยกันและเพิ่มค่าอื่นให้กับ $ args อย่างแรกคือฟิลด์ ID และที่สองคือคำอธิบายจากนั้นเพิ่มอีกหนึ่งบรรทัดในฟังก์ชันการโทรกลับเพื่อสะท้อนคำอธิบายด้วย args [1] :)
Richard Mišenčík

เยี่ยมมากฉันดีใจที่คุณคิดออกหากคุณมีข้อสงสัยแจ้งให้เราทราบ
MrJustin

ฉันคิดว่าป่วยลองตอนนี้เพื่อสร้างหน้าเมนูแยกต่างหากและเพิ่มตัวเลือกที่นั่นเพราะโดยทั่วไปและที่ด้านล่างมันเป็นประเภทที่หายไป ฉันจะบอกให้คุณรู้ว่ามันไปได้อย่างไร
Richard Mišenčík

0

วิธีที่ดีกว่าคือใช้ปลั๊กอินตัวเลือก WordPress หนึ่งในสิ่งที่ดีที่สุดคือฟิลด์กำหนดเองขั้นสูง

http://www.advancedcustomfields.com/

หากคุณซื้อ addon หน้าตัวเลือกจากนั้นคุณสามารถสร้างหน้าตัวเลือกไม่ จำกัด พร้อมคุณสมบัติมากมาย โปรดทำวิดีโออะไรออกมา

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

ปลั๊กอินที่มีประโยชน์มากและ addon


3
ฉันแค่ต้องการเพิ่มบางฟิลด์ดังนั้นปลั๊กอินสำหรับสิ่งนี้จะเป็น overkill สำหรับฉัน แต่ขอบคุณ
Richard Mišenčík

8
ไม่พูดถึงสิ่งนี้ไม่ได้แก้ไขสิ่งที่ OP ต้องการซึ่งเป็นการเพิ่มฟิลด์ในการตั้งค่าทั่วไป AFAIK, ACF ไม่อนุญาตให้คุณผนวกฟิลด์ตามที่เขาตั้งค่าทั่วไป
NW เทค
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.