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:
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?
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' ),
);
}