问题描述
我想做的是将一些自定义字段添加到常规设置。这是我使用的代码。它的工作正常,但我只是想不到如何添加更多的字段。
我现在要创建两个字段,一个是电话号码,另一个用于地址:
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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。