如何将参数从ADD_SETTINGS_FIELD()传递到回调函数?

时间:2011-06-28 作者:Calvin Froedge

我有这样一个函数:

add_settings_field( \'contact_phone\', \'Contact Phone\', \'settings_callback\', \'general\');
这很有效。它调用settings\\u回调。凉的我的问题是:我不想为我添加的每个设置定义回调函数,如果我所做的只是回显一点东西。

function settings_callback()
{
    echo \'<input id="contact_phone" type="text" class="regular-text" name="contact_phone" />\';
}
我究竟为什么要这么做?id、类和名称都应该是params。

是否无法将参数传递给settings\\u回调函数?我开始观察核心,来到这里:http://core.trac.wordpress.org/browser/tags/3.1.3/wp-admin/includes/template.php

..并遇到了$wp\\u settings\\u fields global。这在哪里定义?

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

查看函数的声明:

function add_settings_field(
    $id,
    $title,
    $callback,
    $page,
    $section = \'default\',
    $args    = array()
) { }
最后一个参数接受您的参数并将其传递给回调函数。

我的插件示例Public Contact Data

    foreach ( $this->fields as $type => $desc )
    {
        $handle   = $this->option_name . "_$type";
        $args     = array (
            \'label_for\' => $handle,
            \'type\'      => $type
        );
        $callback = array ( $this, \'print_input_field\' );

        add_settings_field(
            $handle,
            $desc,
            $callback,
            \'general\',
            \'default\',
            $args
        );
    }
功能print_input_field() 获取这些参数作为第一个参数:

/**
 * Input fields in \'wp-admin/options-general.php\'
 *
 * @see    add_contact_fields()
 * @param  array $args Arguments send by add_contact_fields()
 * @return void
 */
public function print_input_field( array $args )
{
    $type   = $args[\'type\'];
    $id     = $args[\'label_for\'];
    $data   = get_option( $this->option_name, array() );
    $value  = $data[ $type ];

    \'email\' == $type and \'\' == $value and $value = $this->admin_mail;
    $value  = esc_attr( $value );
    $name   = $this->option_name . \'[\' . $type . \']\';
    $desc   = $this->get_shortcode_help( $type );

    print "<input type=\'$type\' value=\'$value\' name=\'$name\' id=\'$id\'
        class=\'regular-text code\' /> <span class=\'description\'>$desc</span>";
}
无需接触全局变量。

结束

相关推荐

如何将函数调用添加到插件的options.php默认提交例程?

我正在将两个插件合并为一个插件。我想在新插件的设置面板中选中第二个插件的激活例程作为复选框。但是,我不确定在提交选项时如何执行函数。我该怎么做?我的插件选项。php基本上是这样的。。。<form method=\"post\" action=\"options.php\"> <?php wp_nonce_field(\'update-options\'); ?> //options form goes here <input type=\"hidden