web-dev-qa-db-fra.com

Le bouton "Enregistrer les modifications" de WooCommerce apparaît dans les paramètres personnalisés

J'écris le plugin WooCommerce qui nécessite une page de paramètres personnalisés. J'ai décidé d'étendre les paramètres généraux de WooCommerce en ajoutant un nouvel onglet personnalisé. J'ai réussi à le faire de la manière WooCommerce et tout va bien. Cependant, lorsque j'essaie de restituer mes paramètres, le bouton Save Changes n'est pas rendu correctement.

Voici à quoi ça ressemble:

enter image description here

Et voici le plugin de test:

<?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] );
}

C'est un exemple assez simple, mais ne fonctionne pas correctement ... Qu'est-ce que je fais mal?

2
Eugene Manuilov

Ok, la solution est assez facile, bien que pas évident du tout. Il suffit d’ajouter array( 'type' => 'sectionend', 'id' => 'test-options' ), à la fin du groupe de paramètres. Donc, la fonction finale devrait ressembler à ceci:

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