我想做的是在常规设置中添加一些自定义字段。
这是我正在使用的代码。一切正常,但我无法确定如何添加更多字段。

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

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

#1 楼

从技术上讲,第二段代码是正确的方法。但是,在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以适合您的需求。如果您需要添加更多内容,只需复制并粘贴其中一个并进行编辑即可。请确保执行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čík
2014年1月10日11:30



已进行编辑,应该可以100%完成。如果您有任何问题或疑问,请告诉我。我对此发表了很多评论。

–朱斯汀先生
2014年1月11日,0:31



@MrJusting非常感谢。实际上,通过查看您的个人资料并检查了您回答的问题“在自定义菜单页面上实现选项卡”,它可以正常工作。它的评论非常好,因此我比较了我的代码,最终了解了它的工作原理。对我来说,页面和区域参数令人困惑,尽管它就像页面的区域而不是设置的区域。因此,现在我将两者组合在一起,并向$ args添加了另一个值,所以首先是字段id,其次是description,然后在回调函数中添加了另一行以args [1]来呼应描述:)

–RichardMišenčík
2014年1月12日在21:04

太好了,很高兴您能解决问题,如果您有任何问题让我知道。

–朱斯汀先生
2014年1月13日15:38



我认为我现在将尝试创建一个单独的菜单页面并在其中添加选项,因为通常来说,从最底部开始,它就会丢失。我会让你知道那是怎么回事

–RichardMišenčík
2014年1月13日下午16:20

#2 楼

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

http://www.advancedcustomfields.com/

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

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

非常有用的插件和插件。

评论


我只想添加一些字段,因此仅此插件对我来说就算太过分了,但谢谢。

–RichardMišenčík
2014年1月10日,11:28



更不用说这不能解决OP想要的问题,而是要在“常规设置”中添加字段。 AFAIK,ACF不允许您在“常规设置”中附加字段。

– NW Tech
2014年1月14日18:30