web-dev-qa-db-ja.com

プラグインオプションページを拡張する

私は最近、Wordpress Settingsメニューの下にオプションページを作成したPost Views Counterプラグインをインストールしました。今、私はいくつかのオプションを追加することでプラグイン機能を拡張したいと思います。それは私が作成した別のプラグインによって行われます。目標は、実際に他のオプションがあるページに自分のオプションを直接追加することです。トップレベルのメニュー、Settingsの下のサブメニュー、その他のものは作成したくありません。どうやってやるの?

ありがとうRiccardo

1
R99Photography

サードパーティプラグイン(拡張したいプラグイン)がSettings APIを使用している場合、サードパーティプラグインによって定義されたオプションページとオプショングループがあれば、新しい設定フィールドを追加できます。設定APTも使用してください。

  • まず、 add_setting_field() を使うと、3番目のプラグインで定義されている設定セクションに新しいフィールドを追加できます。
  • 次に、 register_setting() を使うと、プラグインで定義されているオプショングループ内に新しい設定を登録できます。

非常に簡単な例:

add_action( 'admin_init', 'cyb_add_settings_field_to_plugin' );
function cyb_add_settings_field_to_plugin() {

    add_settings_field(
        'some_id',
        'Some title',
        'cyb_field_callback',
        'plugin-settins-page', // Settings page defined by the third party plugin
        'plugin-settings-section', // Section defined by the third party plugin
        array()
    );

    register_setting(
        'option-group', // Options group defined by third party plugin
        'my-option-name', // Custom option name
        'cyb_sanitize_callback' // Sanitize
    );

}

function cyb_field_callback() {
    $value = get_option( 'my-option-name' );
    ?>
    <input type="text" id="some_id" name="my-option-name" value="<?php echo esc_attr( $value ); ?>" />
    <?php
}

function cyb_sanitize_callback( $inputs ) {
    // Do sanitization of the the inputs
    return $inputs;
}

ご希望の場合は、新しいセクションを追加することもできます。

add_action( 'admin_init', 'cyb_add_settings_field_to_plugin' );
function cyb_add_settings_field_to_plugin() {

    add_settings_section(
        'new-settings-section',
        'Settings Section Title',
        'cyb_print_section_info', // Callback
        'plugin-settins-page' // Settings page defined by the third party plugin
    );  
    add_settings_field(
        'some_id',
        'Some title',
        'cyb_field_callback',
        'plugin-settins-page', // Settings page defined by the third party plugin
        'new-settings-section', // My custom section defined above
        array()
    );
    register_setting(
        'option-group', // Options group defined by third party plugin
        'my-option-name', // Option name
        'cyb_sanitize_callback' // Sanitize
    );
}

function cyb_print_section_info() {
    echo 'Section info';
}

function cyb_field_callback() {
    $value = get_option( 'my-option-name' );
    ?>
    <input type="text" id="some_id" name="my-option-name" value="<?php echo esc_attr( $value ); ?>" />
    <?php
}

function cyb_sanitize_callback( $inputs ) {
    // Do sanitization of the the inputs
    return $inputs;
}
0
cybmeta