在选项讨论管理页面上添加设置字段

时间:2013-04-25 作者:kaiser

问题描述

我正在寻找将设置部分/设置字段添加到~/wp-admin/options-discussion.php 准确翻页where Core calls…

do_settings_sections(\'discussion\');
如何注册设置并添加设置字段时,不会显示任何内容:

function register_setting()
{
    register_setting(
         \'discussion\'
        ,$this->option_name
        ,array( $this, \'sanitize_setting\' )
    );
}

public function add_settings_field()
{
    add_settings_field(
         $this->option_name
        ,__( \'Label\', \'wpse_textdomain\' )
        ,array( $this, \'render_field\' )
        ,\'discussion\'
        ,\'discussion\'
        ,array()
    );
}
调试/检查现在我很好奇为什么什么都没有出现,并转储了内核中该行正下方保存设置部分的全局文件:

var_dump( $GLOBALS[\'wp_settings_sections\'] );
输出非常简单NULL.

问题

如何在那里注册设置,without 将节注册到add_settings_section( \'discussion\', __( \'Title\', \'textdomain\' ), \'callback\', \'discussion\' ); 第一

原因很简单:如果另一个插件随后注册了相同的部分,它将覆盖/覆盖添加的部分。

EDIT 更清楚地说明我的要求。我知道有两个部分default &;avatars 已经出现在页面上,我可以挂在那里。重点是我不想挂接到现有的核心功能设置中,而是挂接到它们下面的设置部分中,直接挂接到核心应该输出的设置部分中do_settings_sections( \'discussion\' );. 重点还在于discussion 页面从未由core注册,因此无法用作do_settings_section() 中止,但无法循环浏览任何(未)注册的页面。我完全同意一个证实这一点的答案,并表示:不,不起作用。是一个bugeven better 创建或帮助创建面片。

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

你必须打电话add_settings_section() 首先,传递一个唯一的ID并将其分配给页面(糟糕的名称)discussion:

add_settings_section( \'ads_id\', \'Extra Settings\', \'ads_description\', \'discussion\' );
然后注册回调以保存字段…

// Register a callback
register_setting(
    \'discussion\',
    \'ads\',
    \'trim\'
);
…然后注册一个或多个字段:

// Register the field for the "avatars" section.
add_settings_field(
    \'ads\',
    \'Test field\',
    \'ads_show_settings\',
    \'discussion\',
    \'ads_id\',
    array ( \'label_for\' => \'ads_id\' )
);
下面是一个非常简单的示例:

add_action( \'admin_init\', \'ads_register_setting\' );

/**
 * Tell WP we use a setting - and where.
 */
function ads_register_setting()
{
    add_settings_section(
        \'ads_id\',
        \'Extra Settings\',
        \'ads_description\',
        \'discussion\'
    );

    // Register a callback
    register_setting(
        \'discussion\',
        \'ads\',
        \'trim\'
    );
    // Register the field for the "avatars" section.
    add_settings_field(
        \'ads\',
        \'Test field\',
        \'ads_show_settings\',
        \'discussion\',
        \'ads_id\',
        array ( \'label_for\' => \'ads_id\' )
    );
}

/**
 * Print the text before our field.
 */
function ads_description()
{
    ?><p class="description">This is the description</p><?php
}

/**
 * Show our field.
 *
 * @param array $args
 */
function ads_show_settings( $args )
{
    $data = esc_attr( get_option( \'ads\', \'\' ) );

    printf(
        \'<input type="text" name="ads" value="%1$s" id="%2$s" />\',
        $data,
        $args[\'label_for\']
    );
}
注意第五个参数add_settings_field().

结果

enter image description here

结束

相关推荐