Poniższy artykuł dotyczy WC Vendors pro.
Dodawanie niestandardowych pól do formularza edycji produktu można osiągnąć na dwa sposoby.
- Edycja szablonu i wstawienie elementów formularza, których potrzebujesz
- Używanie akcji (zalecana opcja)
Przykłady pól
Mamy kompletny pomocnik formularzy, który zapewnia różnorodne pola, które można wstawić do swoich formularzy. Oto dwa przykładowe pola, które można przetestować.
Pole tekstowe
<?php WCVendors_Pro_Form_Helper::textarea( array( 'post_id' => $object_id, 'id' => 'wcv_custom_product_ingredients', 'label' => __( 'Ingredients', 'wcvendors-pro' ), 'placeholder' => __( 'Ingredients', 'wcvendors-pro' ), 'desc_tip' => 'true', 'description' => __( 'The product ingredients', 'wcvendors-pro' ), ) ); ?>
Obszar tekstowy
<?php
WCVendors_Pro_Form_Helper::input( array(
'type' => 'text',
'post_id' => $object_id,
'id' => 'wcv_custom_product_ingredients',
'label' => __( 'Ingredients', 'wcvendors-pro' ),
'placeholder' => __( 'Ingredients', 'wcvendors-pro' ),
'desc_tip' => 'true',
'description' => __( 'The product ingredients', 'wcvendors-pro' ),
) );
?>
Edycja szablonu
Ten kod doda niestandardowe pole do formularza dodawania/edycji WC Vendor Pro. Skopiuj szablon /plugins/wc-vendors-pro/templates/dashboard/product-edit.php do /themes/your-theme/wc-vendors/dashboard/product-edit.php, a następnie dodaj ten kod, w tym otwierające/zamykające tagi PHP, w dowolnym miejscu formularza, w którym chcesz umieścić niestandardowe pole.
Poniższy przykładowy kod doda pole o nazwie „Składniki” z obszarem tekstowym do wprowadzania niestandardowego pola. Pole jest następnie zapisywane jako „wcv_custom_product_ingredients” i pojawi się na stronie produktu w polu meta niestandardowych pól.
Możesz zmienić wcv_custom_product_ingredients na cokolwiek chcesz, o ile klucz meta zaczyna się od wcv_custom _product lub _wcv_custom_product_ — Jeśli nie zaczniesz klucza meta od tego, zostanie on zignorowany. Jeśli klucz meta ma przed sobą podkreślenie _, zostanie ukryty na stronie produktu w panelu administracyjnym WordPress, bez podkreślenia zostanie wyświetlony w polu meta Niestandardowe pola.
Poniższy kod należy umieścić w szablonie product-edit.php, zgodnie z wytycznymi w Przewodniku konfiguracji WCVendors Pro, a szablon można nadpisać, korzystając z poniższego przewodnika: zmiana szablonów sprzedawcy.
Musisz wiedzieć, gdzie chcesz wyświetlić pole. Zakomentowaliśmy plik szablonu, aby można było zobaczyć różne zakładki
- ogólne
- magazyn
- wysyłka
- upselle i cross-sellery (niezalecane)
- atrybuty (niezalecane)
- wariacje (niezalecane)
- SEO produktu
Poniższy przykład umieści obszar tekstowy na składniki jako ostatnie pole w zakładce Ogólne
<?php
/**
* The template for displaying the Product edit form
*
* Override this template by copying it to yourtheme/wc-vendors/dashboard/
*
* @package WCVendors_Pro
* @version 1.6.3
*/
/**
* DO NOT EDIT ANY OF THE LINES BELOW UNLESS YOU KNOW WHAT YOU'RE DOING
*/
$title = ( is_numeric( $object_id ) ) ? __( 'Save Changes', 'wcvendors-pro' ) : __( 'Add Product', 'wcvendors-pro' );
$page_title = ( is_numeric( $object_id ) ) ? __( 'Edit Product', 'wcvendors-pro' ) : __( 'Add Product', 'wcvendors-pro' );
$product = ( is_numeric( $object_id ) ) ? wc_get_product( $object_id ) : null;
$post = ( is_numeric( $object_id ) ) ? get_post( $object_id ) : null;
// Get basic information for the product
$product_title = ( isset( $product ) && null !== $product ) ? $product->get_title() : '';
$product_description = ( isset( $product ) && null !== $product ) ? $post->post_content : '';
$product_short_description = ( isset( $product ) && null !== $product ) ? $post->post_excerpt : '';
$post_status = ( isset( $product ) && null !== $product ) ? $post->post_status : '';
/**
* Ok, You can edit the template below but be careful!
*/
?>
<h2><?php echo $page_title; ?></h2>
<?php do_action( 'wcvendors_before_product_form' ); ?>
<!-- Product Edit Form -->
<form method="post" action="" id="wcv-product-edit" class="wcv-form">
<!-- Basic Product Details -->
<div class="wcv-product-basic wcv-product">
<?php do_action( 'wcv_before_product_details', $object_id ); ?>
<!-- Product Title -->
<?php WCVendors_Pro_Product_Form::title( $object_id, $product_title ); ?>
<!-- Product Description -->
<?php WCVendors_Pro_Product_Form::description( $object_id, $product_description ); ?>
<!-- Product Short Description -->
<?php WCVendors_Pro_Product_Form::short_description( $object_id, $product_short_description ); ?>
<!-- Product Categories -->
<?php WCVendors_Pro_Product_Form::categories( $object_id ); ?>
<!-- Product Tags -->
<?php WCVendors_Pro_Product_Form::tags( $object_id, true ); ?>
<?php do_action( 'wcv_after_product_details', $object_id ); ?>
</div>
<div class="all-100">
<?php do_action( 'wcv_before_product_media', $object_id ); ?>
<!-- Media uploader -->
<div class="wcv-product-media">
<?php do_action( 'wcv_before_media', $object_id ); ?>
<?php WCVendors_Pro_Form_helper::product_media_uploader( $object_id ); ?>
<?php do_action( 'wcv_after_media', $object_id ); ?>
</div>
<?php do_action( 'wcv_after_product_media', $object_id ); ?>
</div>
<hr/>
<div class="all-100">
<?php do_action( 'wcv_before_product_type', $object_id ); ?>
<!-- Product Type -->
<div class="wcv-product-type">
<?php WCVendors_Pro_Product_Form::product_type( $object_id ); ?>
</div>
<?php do_action( 'wcv_after_product_type', $object_id ); ?>
</div>
<div class="all-100">
<div class="wcv-tabs top" data-prevent-url-change="true">
<?php do_action( 'wcv_before_product_meta_tabs', $object_id ); ?>
<?php WCVendors_Pro_Product_Form::product_meta_tabs(); ?>
<?php do_action( 'wcv_before_general_tab', $object_id ); ?>
<!-- General Product Options -->
<div class="wcv-product-general tabs-content" id="general">
<div class="hide_if_grouped">
<!-- SKU -->
<?php WCVendors_Pro_Product_Form::sku( $object_id ); ?>
<!-- Private listing -->
<?php WCVendors_Pro_Product_Form::private_listing( $object_id ); ?>
</div>
<div class="options_group show_if_external">
<?php WCVendors_Pro_Product_Form::external_url( $object_id ); ?>
<?php WCVendors_Pro_Product_Form::button_text( $object_id ); ?>
</div>
<div class="show_if_simple show_if_external">
<!-- Price and Sale Price -->
<?php WCVendors_Pro_Product_Form::prices( $object_id ); ?>
</div>
<div class="show_if_simple show_if_external show_if_variable">
<!-- Tax -->
<?php WCVendors_Pro_Product_Form::tax( $object_id ); ?>
</div>
<div class="show_if_downloadable" id="files_download">
<!-- Downloadable files -->
<?php WCVendors_Pro_Product_Form::download_files( $object_id ); ?>
<!-- Download Limit -->
<?php WCVendors_Pro_Product_Form::download_limit( $object_id ); ?>
<!-- Download Expiry -->
<?php WCVendors_Pro_Product_Form::download_expiry( $object_id ); ?>
<!-- Download Type -->
<?php WCVendors_Pro_Product_Form::download_type( $object_id ); ?>
</div>
<?php
WCVendors_Pro_Form_Helper::textarea( array(
'post_id' => $object_id,
'id' => 'wcv_custom_product_ingredients',
'label' => __( 'Ingredients', 'wcvendors-pro' ),
'placeholder' => __( 'Ingredients', 'wcvendors-pro' ),
'desc_tip' => 'true',
'description' => __( 'The product ingredients', 'wcvendors-pro' ),
) );
?>
<?php do_action( 'wcv_product_options_general_product_data', $object_id ); ?>
</div>
<?php do_action( 'wcv_after_general_tab', $object_id ); ?>
<?php do_action( 'wcv_before_inventory_tab', $object_id ); ?>
<!-- Inventory -->
<div class="wcv-product-inventory inventory_product_data tabs-content" id="inventory">
<?php WCVendors_Pro_Product_Form::manage_stock( $object_id ); ?>
<?php do_action( 'wcv_product_options_stock', $object_id ); ?>
<div class="stock_fields show_if_simple show_if_variable">
<?php WCVendors_Pro_Product_Form::stock_qty( $object_id ); ?>
<?php WCVendors_Pro_Product_Form::backorders( $object_id ); ?>
<?php WCVendors_Pro_Product_Form::low_stock_threshold( $object_id ); ?>
</div>
<?php WCVendors_Pro_Product_Form::stock_status( $object_id ); ?>
<div class="options_group show_if_simple show_if_variable">
<?php WCVendors_Pro_Product_Form::sold_individually( $object_id ); ?>
</div>
<?php do_action( 'wcv_product_options_sold_individually', $object_id ); ?>
<?php do_action( 'wcv_product_options_inventory_product_data', $object_id ); ?>
</div>
<?php do_action( 'wcv_after_inventory_tab', $object_id ); ?>
<?php do_action( 'wcv_before_shipping_tab', $object_id ); ?>
<!-- Shipping -->
<div class="wcv-product-shipping shipping_product_data tabs-content" id="shipping">
<div class="hide_if_grouped hide_if_external">
<!-- Shipping rates -->
<?php WCVendors_Pro_Product_Form::shipping_rates( $object_id ); ?>
<!-- weight -->
<?php WCVendors_Pro_Product_Form::weight( $object_id ); ?>
<!-- Dimensions -->
<?php WCVendors_Pro_Product_Form::dimensions( $object_id ); ?>
<?php do_action( 'wcv_product_options_dimensions', $object_id ); ?>
<!-- shipping class -->
<?php WCVendors_Pro_Product_Form::shipping_class( $object_id ); ?>
<?php do_action( 'wcv_product_options_shipping', $object_id ); ?>
<?php do_action( 'wcv_product_options_shipping_data_panel', $object_id ); ?>
</div>
</div>
<?php do_action( 'wcv_after_shipping_tab', $object_id ); ?>
<?php do_action( 'wcv_before_linked_tab', $object_id ); ?>
<!-- Upsells and grouping -->
<div class="wcv-product-upsells tabs-content" id="linked_product">
<div class="show_if_grouped hide_if_external">
<?php WCVendors_Pro_Product_Form::grouped_products( $object_id, $product ); ?>
</div>
<?php WCVendors_Pro_Product_Form::up_sells( $object_id ); ?>
<div class="hide_if_grouped hide_if_external">
<?php WCVendors_Pro_Product_Form::crosssells( $object_id ); ?>
</div>
<?php do_action( 'wcv_product_options_upsells_product_data' ); ?>
</div>
<?php do_action( 'wcv_after_linked_tab', $object_id ); ?>
<!-- Attributes -->
<?php do_action( 'wcv_before_attributes_tab', $object_id ); ?>
<div class="wcv_product_attributes tabs-content" id="attributes">
<div class="attributes-validation-error"></div>
<?php WCVendors_Pro_Product_Form::product_attributes( $object_id ); ?>
<?php do_action( 'wcv_product_options_attributes_product_data', $object_id ); ?>
</div>
<?php do_action( 'wcv_after_attributes_tab', $object_id ); ?>
<!-- Variations -->
<?php do_action( 'wcv_before_variations_tab', $object_id ); ?>
<div class="wcv_product_variations tabs-content" id="variations">
<?php WCVendors_Pro_Product_Form::product_variations( $object_id ); ?>
<?php do_action( 'wcv_product_options_variations_product_data', $object_id ); ?>
</div>
<?php do_action( 'wcv_after_variations_tab', $object_id ); ?>
<!-- Product SEO -->
<?php do_action( 'wcv_before_seo_tab', $object_id ); ?>
<div class="wcv_product_seo tabs-content" id="seo">
<?php WCVendors_Pro_Product_Form::product_seo( $object_id ); ?>
<?php do_action( 'wcv_product_seo_data' ); ?>
</div>
<?php do_action( 'wcv-after_seo_tab', $object_id ); ?>
<?php WCVendors_Pro_Product_Form::form_data( $object_id, $post_status ); ?>
<?php WCVendors_Pro_Product_Form::save_button( $title ); ?>
<?php WCVendors_Pro_Product_Form::draft_button( __( 'Save Draft', 'wcvendors-pro' ) ); ?>
<?php do_action( 'wcv_after_product_meta_tabs', $object_id ); ?>
</div>
</div>
</form>
<?php do_action( 'wcvendors_after_product_form' ); ?>
Używanie akcji
Pozostałe opcje nie wymagają edycji szablonu, a zamiast tego podpinają się do szablonu i go wyprowadzają. Jest to nasza zalecana opcja, ponieważ zapewnia, że nie musisz już aktualizować swoich nadpisań szablonów i jest całkowicie bezpieczna pod kątem aktualizacji.
Mamy akcje przed i po każdym polu, zgodnie z opisem w naszym dokumencie pomocy dotyczącej pomocnika formularzy w sekcji Akcje. Jednak poniżej znajdują się te, które są zdefiniowane w samym szablonie i dodadzą pole na końcu tej zakładki
- Zakładka Ogólne – wcv_product_options_general_product_data
- Zakładka Magazyn – wcv_product_options_inventory_product_data
- Zakładka Wysyłka – wcv_product_options_shipping_data_panel
- Zakładka Upselle i grupowanie – wcv_product_options_upsells_product_data
- Zakładka Atrybuty – wcv_product_options_attributes_product_data
- Zakładka Warianty – wcv_product_options_variations_product_data
- Zakładka SEO produktu – wcv_product_seo_data
Ten przykład wyświetli pole tekstowe składników jako ostatni element na zakładce Ogólne
// Output the custom ingredients as the last option on the general tab.
add_action( 'wcv_product_options_general_product_data', 'wcv_product_ingredients' );
function wcv_product_ingredients( $object_id ){
WCVendors_Pro_Form_Helper::textarea( array(
'post_id' => $object_id,
'id' => 'wcv_custom_product_ingredients',
'label' => __( 'Ingredients', 'wcvendors-pro' ),
'placeholder' => __( 'Ingredients', 'wcvendors-pro' ),
'desc_tip' => 'true',
'description' => __( 'The product ingredients', 'wcvendors-pro' ),
) );
}
Wyświetl pole niestandardowe na stronie pojedynczego produktu
Ten kod wyświetli wartości na stronie pojedynczego produktu. Dodaj ten kod do pliku functions.php swojego motywu:
add_action('woocommerce_product_meta_start', 'wcv_ingredients', 2);
function wcv_ingredients() {
$output = get_post_meta( get_the_ID(), 'wcv_custom_product_ingredients', true ); // Change wcv_custom_product_ingredients to your meta key
echo 'Ingredients: ' . $output . '<br>';
}
Więcej informacji
Lista dostępnych typów pól znajduje się w dokumentacji Form Helper