Thêm nhiều trường tùy chỉnh vào trang cài đặt chung


22

Những gì tôi muốn làm là thêm một vài trường tùy chỉnh vào cài đặt chung. Đây là mã mà tôi đang sử dụng. Nó hoạt động ổn nhưng tôi không thể tìm ra cách thêm nhiều trường.

Bây giờ tôi muốn tạo hai trường, một cho số điện thoại và trường thứ hai cho địa chỉ:

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');

Cách duy nhất tôi quản lý để làm cho nó hoạt động cho nhiều lĩnh vực là sao chép mọi thứ.

Vì vậy, nó sẽ trông như thế này:

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');

Nhưng đây có lẽ không phải là cách tốt nhất để làm điều đó, tôi đã thử tạo một settings_sectionnhưng nó không hoạt động hoặc không tiết kiệm, v.v ... Nó rất khó hiểu.

Câu trả lời:


26

Vâng, bit thứ hai về mặt kỹ thuật là cách chính xác để làm điều đó. Tuy nhiên, vào cuối của add_settings_field()bạn có thể vượt qua tranh luận.

Vui lòng xem tài liệu tham khảo chức năng WordPress Add_Sinstall_Field . Điều này sẽ giúp bạn có được sự hiểu biết tốt nhất về cách thức add_settings_field()hoạt động của chức năng.

Bây giờ, như đã nói, bạn có thể sử dụng chức năng 'chia sẻ' cho cuộc gọi lại của mình. Chẳng hạn như tôi làm trong trang tùy chọn của mình khi tôi phát triển chủ đề.

Dưới đây là một ví dụ về cách tôi làm điều đó.

// 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>';

}

Sẽ mất một chút tùy chỉnh để phù hợp với nhu cầu của bạn, nhưng thực hiện chức năng chia sẻ cho các cuộc gọi lại của bạn sẽ tiết kiệm rất nhiều không gian về mặt mã. Ngoài ra, bạn đang làm nó một cách chính xác.

--Chỉnh sửa--

Ok, đây là những gì nó sẽ giống như bạn .. chỉ cần sửa đổi mã khi cần thiết, tôi đã viết nó ngay lập tức .. Tôi đã kiểm tra nó để kiểm tra, và nó đã hoạt động. Bạn chỉ cần sửa đổi add_settings_field(các) cho phù hợp với nhu cầu của bạn. Nếu bạn cần thêm nhiều hơn, chỉ cần sao chép và dán một cái và chỉnh sửa nó. Hãy chắc chắn rằng register_settingnó sẽ không hoạt động.

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 . '" />';
}

Vì vậy, điều tôi không hiểu là tham số thứ 4 và thứ 5 trong add_sinstall_field (). Tôi biết cái đầu tiên là ID, thứ hai là tên, thứ ba là gọi lại để hiển thị nó, nhưng cái tiếp theo để làm gì? Bạn có ch_essentials_front_page_option cho cả hai, tôi chỉ có 'chung' ở cùng một nơi, cái tiếp theo trống và cái cuối cùng bây giờ là mảng args. Vì vậy, bây giờ trong cuộc gọi lại, bạn có get_option với giá trị đó, nhưng tôi không biết nên đặt gì trong trường hợp của mình.
Richard Mišenčík

2
Chỉnh sửa đã được thực hiện, điều đó sẽ giúp bạn đi 100%. Hãy cho tôi biết nếu bạn có bất kỳ vấn đề hoặc câu hỏi. Tôi đã bình luận rất nhiều về nó.
MrJustin

@MrJusting Cảm ơn rất nhiều. Tôi thực sự đã làm cho nó hoạt động bằng cách xem hồ sơ của bạn và kiểm tra một Questioin mà bạn đã trả lời, "Thực hiện các tab trên tùy chỉnh-menu-trang". Nó đã được nhận xét rất tốt, vì vậy sau đó tôi đã so sánh mã của mình và cuối cùng đã hiểu cách thức hoạt động của nó. Đối với tôi các tham số trang và phần là khó hiểu, mặc dù nó giống như phần của trang chứ không phải phần cài đặt. Vì vậy, bây giờ tôi đã kết hợp cả hai lại với nhau và thêm một giá trị khác vào $ args, vì vậy đầu tiên là id trường và thứ hai là mô tả, sau đó thêm một dòng khác vào hàm gọi lại để lặp lại mô tả với args [1] :)
Richard Mišenčík

Tuyệt vời, tôi rất vui vì bạn đã tìm ra nó, nếu bạn có bất kỳ câu hỏi nào hãy cho tôi biết.
MrJustin

Tôi nghĩ Ill thử ngay bây giờ để tạo một trang menu riêng và thêm các tùy chọn ở đó, bởi vì nói chung và ở dưới cùng của nó bị mất. Tôi sẽ cho bạn biết làm thế nào mà đi
Richard Mišenčík

0

Cách tốt hơn là sử dụng một plugin tùy chọn wordpress. Một trong những điều tốt nhất là Trường tùy chỉnh nâng cao.

http: //www.adv câncustomfields.com /

Nếu bạn mua một addon trang tùy chọn, thì bạn có thể tạo một trang tùy chọn không giới hạn với nhiều tính năng. Xin vui lòng những gì ra một video.

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

Rất hữu ích plugin và addon.


3
Tôi chỉ muốn thêm một vài lĩnh vực, vì vậy plugin chỉ dành cho điều này sẽ là quá mức đối với tôi nhưng cảm ơn.
Richard Mišenčík

8
Chưa kể điều này không giải quyết được những gì OP muốn, đó là thêm các trường vào Cài đặt chung. AFAIK, ACF không cho phép bạn nối thêm các trường vào Cài đặt chung.
Công nghệ Tây Bắc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.