Ich versuche, dem WooCommerce-Einstellungsbildschirm eine Registerkarte mit benutzerdefinierten Einstellungen hinzuzufügen. Grundsätzlich möchte ich über Unterabschnitte/Unterregisterkarten eine ähnliche Funktionalität wie die Registerkarte „Produkteinstellungen“ erreichen:
Ich habe keine anständige Dokumentation dazu gefunden, aber ich konnte mithilfe des folgenden Snippets eine benutzerdefinierte Registerkarte hinzufügen:
class WC_Settings_Tab_Demo { public static function init() { add_filter( 'woocommerce_settings_tabs_array', __CLASS__ . '::add_settings_tab', 50 ); } public static function add_settings_tab( $settings_tabs ) { $settings_tabs['test'] = __( 'Settings Demo Tab', 'woocommerce-settings-tab-demo' ); return $settings_tabs; } } WC_Settings_Tab_Demo::init();
Basierend auf dem, was ich in verschiedenen Threads/Tutorials ausgegraben habe, habe ich versucht, Abschnitte/Unterregisterkarten wie folgt zu einem neuen Einstellungsregister hinzuzufügen:
// creating a new sub tab in API settings add_filter( 'woocommerce_get_sections_test','add_subtab' ); function add_subtab( $sections ) { $sections['custom_settings'] = __( 'Custom Settings', 'woocommerce-custom-settings-tab' ); $sections['more_settings'] = __( 'More Settings', 'woocommerce-custom-settings-tab' ); return $sections; } // adding settings (HTML Form) add_filter( 'woocommerce_get_settings_test', 'add_subtab_settings', 10, 2 ); function add_subtab_settings( $settings, $current_section ) { // $current_section = (isset($_GET['section']) && !empty($_GET['section']))? $_GET['section']:''; if ( $current_section == 'custom_settings' ) { $custom_settings = array(); $custom_settings[] = array( 'name' => __( 'Custom Settings', 'text-domain' ), 'type' => 'title', 'desc' => __( 'The following options are used to ...', 'text-domain' ), 'id' => 'custom_settings' ); $custom_settings[] = array( 'name' => __( 'Field 1', 'text-domain' ), 'id' => 'field_one', 'type' => 'text', 'default' => get_option('field_one'), ); $custom_settings[] = array( 'type' => 'sectionend', 'id' => 'test-options' ); return $custom_settings; } else { // If not, return the standard settings return $settings; } }
Ich konnte mit einem ähnlichen Code wie oben neue Unterabschnitte zur Registerkarte „Produkte“ hinzufügen, aber es funktioniert nicht mit meiner neuen benutzerdefinierten Registerkarte. Was habe ich falsch gemacht?
1) 要添加包含部分的设置选项卡,您可以首先使用
woocommerce_settings_tabs_array
过滤器挂钩:2) 要向页面添加新部分,您可以使用
woocommerce_sections_{$current_tab}
复合挂钩,其中{$current_tab}
需要替换为第一个函数中设置的键 slug:'; $array_keys = array_keys( $sections ); foreach ( $sections as $id => $label ) { echo '-
' . $label . ' ' . ( end( $array_keys ) == $id ? '' : '|' ) . '
';
}
echo '
'; } add_action( 'woocommerce_sections_my-custom-tab', 'action_woocommerce_sections_my_custom_tab', 10 );
3)为了添加设置以及处理/保存,我们将使用自定义函数,然后调用该函数:
3.1) 通过
woocommerce_settings_{$current_tab}
复合挂钩添加设置:3.2) 通过
woocommerce_settings_save_{$current_tab}
复合挂钩处理/保存设置:结果:
基于: