Rumah  >  Soal Jawab  >  teks badan

Buat halaman tetapan WooCommerce yang diperibadikan dengan bahagian khusus

Saya cuba menambah tab tetapan tersuai pada skrin tetapan WooCommerce. Pada asasnya saya ingin mencapai fungsi yang serupa dengan tab Tetapan Produk melalui subseksyen/subtab:

Saya tidak menemui sebarang dokumentasi yang baik tentang cara melakukan ini, tetapi saya telah dapat menambah tab tersuai menggunakan coretan berikut:

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();

Berdasarkan perkara yang saya gali daripada pelbagai utas/tutorial, saya telah cuba menambah bahagian/subtab pada tab tetapan baharu seperti ini:

// 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;
    }
}

Saya telah dapat menambahkan subseksyen baharu pada tab Produk menggunakan kod yang serupa dengan di atas, tetapi ia tidak berfungsi dengan tab tersuai baharu saya. Di mana salah saya?

P粉521748211P粉521748211286 hari yang lalu431

membalas semua(1)saya akan balas

  • P粉707235568

    P粉7072355682023-12-13 09:21:04

    1) Untuk menambah tab tetapan dengan bahagian anda boleh menggunakan woocommerce_settings_tabs_array cangkuk penapis:

    // Add the tab to the tabs array
    function filter_woocommerce_settings_tabs_array( $settings_tabs ) {
        $settings_tabs['my-custom-tab'] = __( 'My custom tab', 'woocommerce' );
    
        return $settings_tabs;
    }
    add_filter( 'woocommerce_settings_tabs_array', 'filter_woocommerce_settings_tabs_array', 99 );
    

    2) Untuk menambah bahagian baharu pada halaman yang anda boleh gunakan woocommerce_sections_{$current_tab} 复合挂钩,其中 {$current_tab}Perlu diganti dengan set slug kunci dalam fungsi pertama:

    // Add new sections to the page
    function action_woocommerce_sections_my_custom_tab() {
        global $current_section;
    
        $tab_id = 'my-custom-tab';
    
        // Must contain more than one section to display the links
        // Make first element's key empty ('')
        $sections = array(
            ''              => __( 'Overview', 'woocommerce' ),
            'my-section-1'  => __( 'My section 1', 'woocommerce' ),
            'my-section-2'  => __( 'My section 2', 'woocommerce' )
        );
    
        echo '
      '; $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)Untuk menambah tetapan serta memproses/menyimpan kami akan menggunakan fungsi tersuai dan kemudian memanggil fungsi itu:

    // Settings function
    function get_custom_settings() {
        global $current_section;
    
        $settings = array();
    
        if ( $current_section == 'my-section-1' ) {
    
            // My section 1
            $settings = array(
    
                // Title
                array(
                    'title'     => __( 'Your title 1', 'woocommerce' ),
                    'type'      => 'title',
                    'id'        => 'custom_settings_1'
                ),
    
                // Text
                array(
                    'title'     => __( 'Your title 1.1', 'text-domain' ),
                    'type'      => 'text',
                    'desc'      => __( 'Your description 1.1', 'woocommerce' ),
                    'desc_tip'  => true,
                    'id'        => 'custom_settings_1_text',
                    'css'       => 'min-width:300px;'
                ),
    
                // Select
                array(
                    'title'     => __( 'Your title 1.2', 'woocommerce' ),
                    'desc'      => __( 'Your description 1.2', 'woocommerce' ),
                    'id'        => 'custom_settings_1_select',
                    'class'     => 'wc-enhanced-select',
                    'css'       => 'min-width:300px;',
                    'default'   => 'aa',
                    'type'      => 'select',
                    'options'   => array(
                        'aa'        => __( 'aa', 'woocommerce' ),
                        'bb'        => __( 'bb', 'woocommerce' ),
                        'cc'        => __( 'cc', 'woocommerce' ),
                        'dd'        => __( 'dd', 'woocommerce' ),
                    ),
                    'desc_tip' => true,
                ),
    
                // Section end
                array(
                    'type'      => 'sectionend',
                    'id'        => 'custom_settings_1'
                ),
            );
        
        } elseif ( $current_section == 'my-section-2' ) {
    
            // My section 2
            $settings = array(
    
                // Title
                array(
                    'title'     => __( 'Your title 2', 'woocommerce' ),
                    'type'      => 'title',
                    'id'        => 'custom_settings_2'
                ),
    
                // Text
                array(
                    'title'     => __( 'Your title 2.2', 'text-domain' ),
                    'type'      => 'text',
                    'desc'      => __( 'Your description 2.1', 'woocommerce' ),
                    'desc_tip'  => true,
                    'id'        => 'custom_settings_2_text',
                    'css'       => 'min-width:300px;'
                ),
    
                // Section end
                array(
                    'type'      => 'sectionend',
                    'id'        => 'custom_settings_2'
                ),
            );
        
        } else {
            // Overview
            $settings = array(
    
                // Title
                array(
                    'title'     => __( 'Overview', 'woocommerce' ),
                    'type'      => 'title',
                    'id'        => 'custom_settings_overview'
                ),
    
                // Section end
                array(
                    'type'      => 'sectionend',
                    'id'        => 'custom_settings_overview'
                ),
            );
        }
    
        return $settings;
    }
    

    3.1) Tambah tetapan melalui woocommerce_settings_{$current_tab} cangkuk kompaun:

    // Add settings
    function action_woocommerce_settings_my_custom_tab() {
        // Call settings function
        $settings = get_custom_settings();
    
        WC_Admin_Settings::output_fields( $settings );  
    }
    add_action( 'woocommerce_settings_my-custom-tab', 'action_woocommerce_settings_my_custom_tab', 10 );
    

    3.2) Kendalikan/simpan tetapan melalui woocommerce_settings_save_{$current_tab} cangkuk kompaun:

    // Process/save the settings
    function action_woocommerce_settings_save_my_custom_tab() {
        global $current_section;
    
        $tab_id = 'my-custom-tab';
    
        // Call settings function
        $settings = get_custom_settings();
    
        WC_Admin_Settings::save_fields( $settings );
    
        if ( $current_section ) {
            do_action( 'woocommerce_update_options_' . $tab_id . '_' . $current_section );
        }
    }
    add_action( 'woocommerce_settings_save_my-custom-tab', 'action_woocommerce_settings_save_my_custom_tab', 10 );
    

    Hasil:


    Berdasarkan:

    balas
    0
  • Batalbalas