validar producto personalizar personalizados fields data custom campos php wordpress woocommerce products meta-boxes

php - producto - woocommerce custom product data fields



Agregar programáticamente una pestaña de configuración personalizada para administrar datos de productos en WooCommerce (1)

Actualizado en noviembre de 2017:

  • Corregí algunos errores, limpié y agregué las opciones disponibles
  • Se agregaron ''Usage'' y ''naming conventions'' para los slugs de campos personalizados, al final.

1) Usted crea una pestaña personalizada en la publicación personalizada tipo Metabox (aquí para "producto"),
2) a continuación, puede agregar campos para llenar esta pestaña, con diferentes tipos de campos (encontrará uno de cada tipo, por lo que este es un ejemplo muy completo).

Y finalmente encontrará una función que guarda los datos cuando se envía.

Aquí es lo que obtendrá visualmente (para los 6 tipos de campos personalizados diferentes):

Aquí está el código relacionado:

// Step 1 - Adding a custom tab to the Products Metabox add_filter( ''woocommerce_product_data_tabs'', ''add_shipping_costs_product_data_tab'', 99 , 1 ); function add_shipping_costs_product_data_tab( $product_data_tabs ) { $product_data_tabs[''shipping-costs''] = array( ''label'' => __( ''Shipping costs'', ''my_theme_domain'' ), // translatable ''target'' => ''shipping_costs_product_data'', // translatable ); return $product_data_tabs; } // Step 2 - Adding and POPULATING (with data) custom fields in custom tab for Product Metabox add_action( ''woocommerce_product_data_panels'', ''add_shipping_costs_product_data_fields'' ); function add_shipping_costs_product_data_fields() { global $post; $post_id = $post->ID; echo ''<div id="shipping_costs_product_data" class="panel woocommerce_options_panel">''; ## THE 6 DIFFERENT FIELD TYPES // Text imput field // Text imput field woocommerce_wp_text_input( array( ''id'' => ''_imput_text'', // ''name'' => ''_imput_text'', // (optional) for different ID attribute than name attribute // ''class'' => ''some-class'', // (optional) // ''wrapper_class'' => ''show_if_simple'', // (optional) example here for simple products type only ''placeholder'' => __( ''Enter some data'', ''theme_domain'' ), // (optional) ''label'' => __( ''Imput text Label'', ''theme_domain'' ), // (optional) ''description'' => __( ''Imput text Description'', ''theme_domain'' ), // (optional) ''desc_tip'' => true, // (optional) To show the description as a tip // ''data_type'' => '''', // (optional formatting options) can be ''price'', ''decimal'', ''stock'' or ''url'' // ''type'' => '''', // (optional additional custom attribute) // ''value'' => $value, // (optional) for a static value (can be conditionally set for $value variable) ) ); // Textarea imput field woocommerce_wp_textarea_input( array( ''id'' => ''_input_textarea'', // ''name'' => ''input_textarea'', // (optional) for different ID attribute than name attribute ''class'' => ''widefat'', // (optional) // ''style'' => '''' // (optional) // ''wrapper_class'' => ''show_if_simple'', // (optional) example here for simple products type only ''placeholder'' => __( ''Enter some data'', ''theme_domain'' ), // (optional) ''label'' => __( ''Imput textarea Label'', ''theme_domain'' ), ''description'' => __( ''Imput textarea Description'', ''theme_domain'' ), ''desc_tip'' => true, // (optional) To show the description as a tip // ''rows'' => 2, // (optional) defining number of rows // ''cols'' => 20, // (optional) defining number of columns // ''value'' => $value, // (optional) for a static value (can be conditionally set for $value variable) ) ); // Checkbox field woocommerce_wp_checkbox( array( ''id'' => ''_input_checkbox'', // ''name'' => ''input_checkbox'', // (optional) for different ID attribute than name attribute // ''class'' => ''some-class'', // (optional) // ''wrapper_class'' => ''show_if_simple'', // (optional) example here for simple products type only ''label'' => __( ''Imput checkbox Label'', ''theme_domain'' ), ''description'' => __( ''Imput checkbox Description'', ''theme_domain'' ), ''desc_tip'' => true, // (optional) To show the description as a tip // ''cbvalue'' => ''yes'', // to make it selected by default // ''value'' => $value, // (optional) for a static value (can be conditionally set for $value variable) ) ); // Radio Buttons field woocommerce_wp_radio( array( ''id'' => ''_imput_radio'', // ''name'' => ''input_radio'', // (optional) for different ID attribute than name attribute // ''class'' => ''some-class'', // (optional) // ''wrapper_class'' => ''show_if_simple'', // (optional) example here for simple products type only ''label'' => __('' '', ''my_theme_domain''), ''description'' => __( ''Imput Radio Description'', ''my_theme_domain'' ), ''desc_tip'' => true ''options'' => array( ''option_value_1'' => __(''Displayed option 1''), ''option_value_2'' => __(''Displayed option 2''), ''option_value_3'' => __(''Displayed option 3''), ), // ''value'' => $value, // (optional) for a static value (can be conditionally set for $value variable) ) ); // Select field woocommerce_wp_select( array( ''id'' => ''_select_field'', // ''name'' => ''_select_field'', // (optional) for different ID attribute than name attribute // ''wrapper_class'' => ''show_if_simple'', // (optional) example here for simple products type only ''label'' => __('' '', ''my_theme_domain''), ''description'' => __( ''Imput Radio Description'', ''my_theme_domain'' ), ''desc_tip'' => true ''options'' => array( '''' => __(''Chose an option''), // Default empty value ''option_value_1'' => __(''Displayed option 1''), ''option_value_2'' => __(''Displayed option 2''), ''option_value_3'' => __(''Displayed option 3'') ), // ''value'' => $value, // (optional) for a static value (can be conditionally set for $value variable) ) ); // Hidden imput field woocommerce_wp_hidden_input( array( ''id'' => ''_hidden_input'', // ''name'' => ''_hidden_input'', // (optional) for different ID attribute than name attribute ''class'' => ''some_class'', // ''value'' => $value, // (optional) for a static value (can be conditionally set for $value variable) ) ); echo ''</div>''; } // Step 3 - Saving custom fields data of custom products tab metabox add_action( ''woocommerce_process_product_meta'', ''shipping_costs_process_product_meta_fields_save'' ); function shipping_costs_process_product_meta_fields_save( $post_id ){ // save the text field data if( isset( $_POST[''_imput_text''] ) ) update_post_meta( $post_id, ''_imput_text'', esc_attr( $_POST[''_imput_text''] ) ) ); // save the textarea field data if( isset( $_POST[''_imput_textarea''] ) ) update_post_meta( $post_id, ''_imput_textarea'', esc_attr( $_POST[''_imput_textarea''] ) ) ); // save the checkbox field data if( isset( $_POST[''_imput_checkbox''] ) ) update_post_meta( $post_id, ''_imput_checkbox'', esc_attr( $_POST[''_imput_checkbox''] ) ) ); // save the radio button field data if( isset( $_POST[''_input_radio''] ) ) update_post_meta( $post_id, ''_input_radio'', esc_attr( $_POST[''_input_radio''] ) ) ); // save the selector field data if( isset( $_POST[''_select_field''] ) ) update_post_meta( $post_id, ''_select_field'', esc_attr( $_POST[''_select_field''] ) ) ); // save the hidden imput data if( isset( $_POST[''_hidden_input''] ) ) update_post_meta( $post_id, ''_hidden_input'', esc_attr( $_POST[''_hidden_input''] ) ); }

Naturalmente, esto va en el archivo function.php de su tema (o tema) hijo activo o en cualquier archivo de complemento.

Debe usar la misma ID de campo personalizada (nombres de slug) en los pasos 2 y 3.

Este código está probado y es completamente funcional

Puede agregar opciones personalizadas con CUALQUIER DATO, usando código personalizado, variables personalizadas o cualquier tipo de funciones en el Paso 2 .

Uso

Para obtener o recuperar los datos, utilizará la función get_post_meta() para una ID de publicación definida:

$custom_field_data = get_post_meta( $post_id, ''_custom_field_slug'', true );

Dónde:

  • $post_id es la ID de publicación actual (del producto, orden, cupón ... post-tipos).
  • custom_field_slug es la ID (la babosa) de tu campo personalizado.
  • true o false : si se devuelve un valor único (cadena de datos o matrices)

Es el mismo proceso cada tipo de campo

Consejo: nombres de slug de campo personalizados (ID de campo personalizado)

Si no utiliza un carácter de subrayado ( _slug_name ) al comienzo de los nombres de slug de sus campos personalizados , estos aparecerán y serán accesibles para los usuarios autorizados en los campos personalizados Metabox, después de enviar los datos (botón Actualizar) .

Vea esta captura de pantalla (aquí obtenemos input_text campo personalizado slug) :

Referencias

Quiero agregar mediante programación una pestaña de configuración al metabox de datos del producto de esta manera:

La pestaña "Verzendkosten" se agregó con Firebug (lo que significa "Costos de envío") .

¿Cómo agregaría programáticamente la pestaña personalizada "Verzendkosten" en la configuración de woocommerce edit-product pages?

(y ¿cómo podría llenarlo con datos?)