向常规设置页面添加多个自定义域

时间:2014-01-09 作者:Richard Mišenčík

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

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

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 但它只是不起作用或没有保存等。它只是非常令人困惑。

2 个回复
最合适的回答,由SO网友:MrJustin 整理而成

从技术上讲,第二位代码是正确的方法。然而,在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] . \'\'] . \'">\';
 
}
这将需要一些定制来满足您的需要,但为回调执行共享函数将在代码方面节省大量空间。Other than that, you are doing it correctly as is.

--编辑--

好吧,这就是你应该的样子。。只要根据需要修改代码,我就可以动态编写这篇文章。。我做了测试来检查,结果成功了。您只需修改add_settings_field(s) 满足您的需求。如果需要添加更多内容,只需复制粘贴一个内容并进行编辑即可。确保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 . \'" />\';
}

SO网友:Foxsk8

更好的方法是使用wordpress选项插件。其中最好的是高级自定义字段。

http://www.advancedcustomfields.com/

如果你买了一个选项页面插件,那么你可以创建一个具有许多功能的无限制选项页面。请拿出一段视频。

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

非常有用的插件和插件。

结束

相关推荐

theme functions (hooks)

WordPress已经提出了这个问题,但没有答案。我只是想在这个论坛上试试,如果有人知道的话,因为我也有同样的问题。要使用jquery滑块编辑我的主题,如何转到该脚本?,显示“$主题->挂钩(\'content\\u before\');”在content div标记中。有人能帮忙吗?我的主题索引。php包含以下内容<div id=\"main\"> <?php $theme->hook(\'main_before\'); ?> &#x