web-dev-qa-db-ja.com

WooCommerceの[変更を保存]ボタンがカスタム設定内に表示されます

私はカスタム設定ページを必要とするWooCommerceプラグインを書いています。私は新しいカスタムタブを追加することによって一般的なWooCommerce設定を拡張することにしました。私はWooCommerceのやり方でそれをする方法を管理しました、そして、すべてはうまく見えます。ただし、設定をレンダリングしようとすると、Save Changesボタンが正しくレンダリングされません。

これはどのように見えるかです:

enter image description here

そしてこれがテストプラグインです。

<?php
/**
 * Plugin Name: WooCommerce Settings Bug
 */

add_action( 'woocommerce_settings_start', 'wpse8170_register_settings' );
function wpse8170_register_settings() {
    global $woocommerce_settings;

    $woocommerce_settings['test'] = array(
        array( 'type' => 'title', 'title' => __( 'My Test Options', 'wc-loyal-customer' ), 'desc' => '', 'id' => 'test-options' ),

        array(
            'title'    => __( 'Enable Test', 'some-text-domain' ),
            'desc'     => __( 'Enable test options', 'some-text-domain' ),
            'id'       => 'test_option',
            'type'     => 'checkbox',
            'default'  => 'yes',
        ),
    );
}

add_filter( 'woocommerce_settings_tabs_array', 'wpse8170_register_settings_tab', PHP_INT_MAX );
function wpse8170_register_settings_tab( $tabs ) {
    $tabs['test'] = esc_html__( 'Test tab', 'some-text-domain' );
    return $tabs;
}

add_action( 'woocommerce_settings_tabs_test', 'wpse8170_render_settings_page' );
function wpse8170_render_settings_page() {
    global $woocommerce_settings, $current_tab;
    woocommerce_admin_fields( $woocommerce_settings[$current_tab] );
}

これは非常に単純な例ですが、正しく動作しません。

2
Eugene Manuilov

わかりました、わかりませんが、修正は非常に簡単です。設定グループの最後にarray( 'type' => 'sectionend', 'id' => 'test-options' ),を追加するだけです。そのため、最終的な関数は次のようになります。

add_action( 'woocommerce_settings_start', 'wpse8170_register_settings' );
function wpse8170_register_settings() {
    global $woocommerce_settings;

    $woocommerce_settings['test'] = array(
        array( 'type' => 'title', 'title' => __( 'My Test Options', 'wc-loyal-customer' ), 'desc' => '', 'id' => 'test-options' ),

        array(
            'title'    => __( 'Enable Test', 'some-text-domain' ),
            'desc'     => __( 'Enable test options', 'some-text-domain' ),
            'id'       => 'test_option',
            'type'     => 'checkbox',
            'default'  => 'yes',
        ),

        array( 'type' => 'sectionend', 'id' => 'test-options' ),
    );
}
2
Eugene Manuilov