问题描述

我想做的是将一些自定义字段添加到常规设置。这是我使用的代码。它的工作正常,但我只是想不到如何添加更多的字段。

我现在要创建两个字段,一个是电话号码,另一个用于地址:

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,但它没有工作或没有保存等。它只是很混乱。

最佳解决方案

那么第二位代码在技术上是正确的方法。但是,在 add_settings_field()的最后,您可以通过争论。

请查看 WordPress Add_Settings_Field 功能参考。这将帮助您更好地了解 add_settings_field()功能如何真正有效。

现在,您可以使用’shared’ 函数进行回调。比如我在我的选项页面,当我开发主题。

这是我如何做的一个例子。

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

}

它将需要一点点的自定义来满足您的需求,但为您的回调执行共享功能将在代码方面节省大量空间。除此之外,你正在做正确的事情。

– 编辑 –

好的,这是它应该是什么样的你只需修改代码,根据需要,我写了这个飞行.. 我做了测试它检查,它的工作。您只需要修改 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 . '" />';
}

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。