Añadir un campo personalizado para productos

El siguiente artículo está relacionado con WC Vendors pro.

Añadir campos personalizados al formulario de edición de productos se puede lograr de dos maneras.

  • Editando la plantilla e insertando los elementos del formulario que necesita
  • Usando Acciones  (opción recomendada)

Ejemplos de campos

Tenemos un ayudante de formularios completo que proporciona una variedad de campos diferentes que puede insertar en sus formularios. Aquí hay dos campos de ejemplo que puede probar.

Campo de texto

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

Área de texto

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

Editando la plantilla

Este código añadirá un campo personalizado al formulario de añadir/editar de WC Vendor Pro. Copie la plantilla /plugins/wc-vendors-pro/templates/dashboard/product-edit.php a /themes/your-theme/wc-vendors/dashboard/product-edit.php y luego agregue este código, incluyendo las etiquetas PHP de apertura/cierre en cualquier lugar del formulario donde desee que se introduzca su campo personalizado.

El siguiente código de ejemplo añadirá un campo llamado "Ingredientes" con un área de texto para introducir el campo personalizado. El campo se guarda como "wcv_custom_product_ingredients" y aparecerá en la página del producto en el cuadro de metadatos de campos personalizados.

Puede cambiar wcv_custom_product_ingredients por lo que quiera, siempre que la clave meta comience con wcv_custom _product o _wcv_custom_product_ — Si no comienza la clave meta con eso, será ignorada. Si la clave meta tiene un guion bajo _ antes, se ocultará en la página del producto en wp-admin, sin guion bajo se mostrará en el cuadro de metadatos de Campos Personalizados.

El código a continuación va en su plantilla product-edit.php como se describe en la Guía de Configuración de WCVendors Pro y puede sobrescribir la plantilla usando la siguiente guía: cambiar plantillas de vendedor. 

Necesita saber dónde quiere que se muestre el campo. Hemos comentado el archivo de plantilla para que pueda ver las diferentes pestañas

  • general
  • inventario
  • envío
  • ventas adicionales y encadenadas (no recomendado)
  • atributos (no recomendado)
  • variaciones (no recomendado)
  • SEO del producto

El siguiente ejemplo colocará el área de texto de ingredientes como el último campo en la Pestaña General

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

Usando Acciones

Las otras opciones no requieren que edite la plantilla en absoluto y en su lugar se enganchan a la plantilla y la generan. Esta es nuestra opción recomendada ya que asegura que ya no tiene que mantener sus sobrescrituras de plantilla actualizadas y es completamente segura ante actualizaciones.

Tenemos acciones para antes y después de cada campo, como se describe en nuestro documento de ayuda del ayudante de formularios bajo Acciones. Sin embargo, aquí están las que están definidas dentro de la propia plantilla que añadirán el campo al final de esa pestaña

  • Pestaña General – wcv_product_options_general_product_data
  • Pestaña Inventario – wcv_product_options_inventory_product_data
  • Pestaña Envío – wcv_product_options_shipping_data_panel
  • Pestaña de ventas adicionales y agrupación – wcv_product_options_upsells_product_data
  • Pestaña Atributos – wcv_product_options_attributes_product_data
  • Pestaña Variaciones – wcv_product_options_variations_product_data
  • Pestaña SEO del producto – wcv_product_seo_data

Este ejemplo mostrará el área de texto de ingredientes como el último elemento en la Pestaña General

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

Mostrar campo personalizado en la página de producto individual

Este código mostrará los valores en la página de producto individual. Añade este código al archivo functions.php de tu tema:

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

Más información

Puede encontrar una lista de los tipos de campo disponibles en la documentación del Ayudante de formularios

¿Te ha resultado útil este artículo?

Artículos relacionados

Completa tu Compra