将多个自定义字段添加到常规设置页面


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

Answers:


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

}

进行一些自定义即可满足您的需求,但是为您的回调执行共享功能将节省大量代码空间。 除此之外,您可以按原样正确进行操作。

- 编辑 -

好的,这就是您的样子。.只需根据需要修改代码,我就即时编写了此代码。您只需要修改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 . '" />';
}

所以我不明白的是add_settings_field()中的第4和第5个参数。我知道第一个是ID,第二个是名称,第三个是显示它的回调,但是下一个是做什么用的?你们两个都有ch_essentials_front_page_option,我在同一位置只有“ general”,下一个是空的,最后一个是args数组。因此,现在在回调中您具有带有该值的get_option,但是我不知道在我的情况下要放置什么。
RichardMišenčík2014年

2
已进行编辑,应该可以100%完成。如果您有任何问题或疑问,请告诉我。我确实对此发表了强烈评论。
MrJustin 2014年

@MrJusting非常感谢。实际上,通过查看您的个人资料并检查了您回答的问题“在自定义菜单页面上执行选项卡”,它可以正常工作。它的评论非常好,因此我比较了我的代码,最后了解了它的工作原理。对我来说,页面和部分参数令人困惑,尽管它就像页面的部分而不是设置的部分。所以,现在我结合两者一起,加上另一个价值的$ args,所以首先是ID字段,二是说明,然后添加另一条线路的回调函数来呼应与ARGS [1] :)描述
理查德Mišenčík

太好了,如果您有任何问题让我知道,我很高兴您已经解决了。
MrJustin 2014年

我认为我现在会尝试创建一个单独的菜单页面并在其中添加选项,因为一般而言,它的底部都会丢失。我会告诉您情况如何
RichardMišenčík2014年

0

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

http://www.advancedcustomfields.com/

如果您购买了选项页面插件,则可以创建具有很多功能的无限选项页面。请出一个视频。

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

非常有用的插件和插件。


3
我只想添加一些字段,所以仅此一个插件对我来说就算太过分了,但谢谢。
RichardMišenčík2014年

8
更不用说这不能解决OP想要的问题,而是要在“常规设置”中添加字段。AFAIK,ACF不允许您在“常规设置”后附加字段。
NW Tech
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.