如何创建WordPress选项页

时间:2012-04-20 作者:Mythical Fish

我严格遵循了以下指南:http://codex.wordpress.org/Creating_Options_Pages

但是当我这样做的时候do_settings_fields, 上面写着:Missing argument 2 for do_settings_fields()尽管上面说只放一个论点。

奇怪的是,同一页上给出的例子说do_settings() - 这似乎不是一个函数!

有些事情告诉我,我需要创建一个“节”,如下所述:http://codex.wordpress.org/Function_Reference/add_settings_section

但我宁愿为我已经做过的事情找到一个快速修复方法。:)

EDIT在过去的一个小时里,我一直在摆弄它,发现了几个显然不存在的wordpress函数。。这是我的最新代码,它不会给我错误,但除了注册菜单页之外,它也不会做任何事情:

<?php
// Register the menu
add_action(\'admin_menu\', \'bang_menu\');
function bang_menu() {
    add_menu_page( \'BANG! Dashboard\', \'BANG!\', \'administrator\', \'bang-admin\', \'bang_dashboard\');
}

// Register settings
add_action(\'admin_init\', \'bang_settings\');  
function bang_settings() {
register_setting( \'bang-options-group\', \'joinform_api_url\' ); // Register the setting
add_settings_section( \'bang_section\', \'Joinform configuration\', null, \'section_options_page_type\' ); // Register the section
add_settings_field( \'api_url\', \'API URL\', \'field_joinform_api_url\', \'section_options_page_type\', \'bang_section\' ); // Define callback function for setting
}


function field_joinform_api_url() {
    echo \'field here...\';
}


function bang_dashboard() {

    echo \'
    <div class="wrap">
        <div class="postbox-container metabox-holder">
            <div class="postbox">
                <h3>Joinform configuration</h3>

                <form action="options.php" method="post">\';
                settings_fields( \'bang-options-group\' );
                do_settings_sections( \'bang_section\');
etc...

1 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

我首先想到的是你对register_setting():

register_setting( \'bang-options-group\', \'joinform_api_url\' );
它缺少了一个关键的第三个论点:sanitization callback. 虽然此参数以编程方式是可选的,但如果没有它,则无法验证/清理/白名单通过设置表单传递给DB的数据值。

进一步查看代码,您似乎误用了传递给的所有参数register_setting( $group, $option, $callback ):* $group: 选项组名称;相当随意,但必须是唯一的*$option: DB表中存在的选项名称*$callback: 清理回调

当你叫它的时候,你告诉WordPress你的选择namejoinform_api_url, 它本身实际上是某种回调。

我看到的下一个问题是使用do_settings_sections():

do_settings_sections( \'bang_section\');
此功能的正确参数为$page 调用的参数add_settings_section( $id, $title, $callback, $page ):

add_settings_section( \'bang_section\', \'Joinform configuration\', null, \'section_options_page_type\' );
正如你所看到的,你正在通过$id 参数,而不是$page 参数,至do_settings_sections().

还有,你通过了null 用于节回调参数。为什么?

我完全理解在所有设置API相关函数之间保持函数参数的直接相关性是多么困难。作为我的设置API教程的一部分,I included a section to help keep track of this correlation. 当您逐步完成实现时,它可能会有所帮助。

最后:我建议您一步一个脚印地完成这项工作,而不是尝试将所有内容拼凑在一起,然后尝试进行故障排除。这样,您就可以在每个步骤中找出存在任何潜在问题的地方,并可以在问题与每个附加步骤混合之前解决它。

将设置页面添加到菜单定义设置页面回调寄存器设置添加设置部分添加设置字段回调定义设置字段回调每次一个,注意每个步骤的函数参数相关性。确保在进入下一步之前获得预期的输出。

通常,一旦您使用此方法获得了一个工作示例,它就会“点击”。但在你这样做之前,它可能会令人难以置信地困惑/畏惧。

结束

相关推荐