Cum să adaugi un tab vizibil doar în partea de admin a unui produs în WooCommerce?

5 apr. 2016, 07:41:26
Vizualizări: 13.6K
Voturi: 9

Interfața de administrare WooCommerce

Sunt nou în dezvoltarea WordPress. Doresc să adaug setări pe pagina de produs într-un tab nou.

Cum pot adăuga aceste setări?

Codul pe care l-am încercat pentru adăugarea tab-ului:

//adaugă linkul tab-ului de produs în admin
add_action('woocommerce_product_write_panel_tabs', array($this,'woocommerce_product_write_panel_tabs'));
//adaugă conținutul tab-ului de produs în admin
add_action('woocommerce_product_write_panels', array($this,'woocommerce_product_write_panels'));

/**
 * woocommerce_product_write_panel_tabs
 * Folosit pentru a adăuga un tab personalizat în ecranul de editare produs
 * @return void
 */
function woocommerce_product_write_panel_tabs(){
    ?>
    <li class="custom_tab">
        <a href="#custom_tab_data_ctabs">
            <?php _e('Taburi Personalizate', 'GWP'); ?>
        </a>
    </li>
    <?php
}

/**
 * woocommerce_product_write_panels
 * Folosit pentru afișarea conținutului tab-ului personalizat (câmpuri) în ecranul de editare produs
 * @return void
 */
function woocommerce_product_write_panels() {
    global $post,$woocommerce;
    $fields = array(
        array(
            'key'   => 'custom_tabs_ids',
            'label' => __( 'Selectează Taburi Personalizate', 'GWP' ),
            'desc'  => __( 'Începe să tastezi numele Tabului Personalizat, folosit pentru includerea tab-urilor personalizate.', 'GWP' )
        ),
        array(
            'key'   => 'exclude_custom_tabs_ids',
            'label' => __( 'Selectează Taburi Globale de Exclus', 'GWP' ),
            'desc'  => __( 'Începe să tastezi numele Tabului Personalizat, folosit pentru excluderea tab-urilor globale.', 'GWP' )
        ),
        array(
            'key'   => 'id',
            'label' => __( 'Selectează Taburi Globale de Exclus', 'GWP' ),
            'desc'  => __( 'Începe să tastezi numele Tabului Personalizat, folosit pentru excluderea tab-urilor globale.', 'GWP' )
        )
    );

}

2
Comentarii

Ai încercat documentația WooCommerce?

Sumit Sumit
5 apr. 2016 08:37:44

@Dipika: Ai folosit filtre și acțiuni greșite, verifică răspunsul meu. Am testat codul pe sistemul meu local.

Mehul Gohil Mehul Gohil
5 apr. 2016 08:54:52
Toate răspunsurile la întrebare 1
2
13

Am lucrat la problema ta și am găsit o soluție după o scurtă căutare pe Google.

Notă: Adaugă codul menționat mai jos în fișierul functions.php al temei sau în fișierul oricărui plugin.

Cod:

Acest filtru va adăuga un tab personalizat în metabox-ul Datele Produsului

<?php  
add_filter( 'woocommerce_product_data_tabs', 'add_my_custom_product_data_tab' , 99 , 1 );
function add_my_custom_product_data_tab( $product_data_tabs ) {
    $product_data_tabs['my-custom-tab'] = array(
        'label' => __( 'Tab Personalizat', 'my_text_domain' ),
        'target' => 'my_custom_product_data',
    );
    return $product_data_tabs;
}

Această acțiune va adăuga câmpuri personalizate în tab-ul adăugat sub metabox-ul Datele Produsului

add_action( 'woocommerce_product_data_panels', 'add_my_custom_product_data_fields' );
function add_my_custom_product_data_fields() {
    global $woocommerce, $post;
    ?>
    <!-- id-ul de mai jos trebuie să corespundă cu target-ul înregistrat în funcția add_my_custom_product_data_tab de mai sus -->
    <div id="my_custom_product_data" class="panel woocommerce_options_panel">
        <?php
        woocommerce_wp_checkbox( array( 
            'id'            => '_my_custom_field', 
            'wrapper_class' => 'show_if_simple', 
            'label'         => __( 'Etichetă Câmp Personalizat', 'my_text_domain' ),
            'description'   => __( 'Descriere Câmp Personalizat', 'my_text_domain' ),
            'default'       => '0',
            'desc_tip'      => false,
        ) );
        ?>
    </div>
    <?php
}
?>

Salvează datele câmpurilor personalizate din tab-ul produselor:

add_action( 'woocommerce_process_product_meta', 'woocommerce_process_product_meta_fields_save' );
function woocommerce_process_product_meta_fields_save( $post_id ){
    // Acesta este cazul pentru salvarea datelor câmpului personalizat de tip checkbox. Trebuie să faci asta în funcție de câmpurile tale personalizate
    $woo_checkbox = isset( $_POST['_my_custom_field'] ) ? 'yes' : 'no';
    update_post_meta( $post_id, '_my_custom_field', $woo_checkbox );
}

Sper că te ajută!

5 apr. 2016 08:48:12
Comentarii

Dacă vreau să salvez conținutul unui câmp personalizat în baza de date, cum pot face acest lucru?

Dipika Dipika
5 apr. 2016 15:27:05

@Dipika: Te rog să consulți răspunsul meu actualizat în postarea anterioară cu răspuns.

Mehul Gohil Mehul Gohil
5 apr. 2016 15:38:11