Plugin Author
Halyra
(@harasse)
Bonjour,
Une hypothèse : Les hstariff d’origine mis dans les produits contiennent-ils des blancs ou digits non numériques ? Depuis la version 5.2.5 un contrôle supplémentaire a été mis sur la structure de ces données.
Sinon pour forcer un hstariff ou autre donnée, vous pouvez aussi utiliser le filtre : ‘cdi_filterarray_orderlist_before_metaboxcn23art’ .
Voici un exemple d’utilisation de ce filtre qui reprend un attribut du produit pour le réinjecter dans la commande en hstariff :
add_filter( 'cdi_filterarray_orderlist_before_metaboxcn23art','example2_cdi_filterarray_orderlist_before_metaboxcn23art', 10, 4) ;
function example2_cdi_filterarray_orderlist_before_metaboxcn23art ($arrayinitmetabox, $order, $valueshippingmethod, $item) {
//Change datas in $arrfilter array to be put in metabox
//Example to pick-up a hstariffnumber in product to force in order items
global $woocommerce;
$product_id = $item['product_id'];
$product = wc_get_product( $product_id );
$attributes = $product->get_attributes() ;
foreach ( $attributes as $attribute ):
$attribute_name = $attribute->get_taxonomy(); // The taxonomy slug name
if ($attribute_name == 'pa_hstariff') { // Check if it's the right taxo you are looking for
$attribute_slugs = $attribute->get_slugs()[0]; // The term slugs
$arrayinitmetabox['_cdi_meta_cn23_article_hstariffnumber'] = $attribute_slugs ; // Update item order with data you want
}
endforeach;
return $arrayinitmetabox;
}
Pour info, lors de la prochaine version de CDI, la séquence du hstariff devra être réécrite pour être plus conforme aux règles Woocommerce.
Thread Starter
alpha2
(@neoseeyou)
Bonjour et merci pour votre réponse, non les hstarrif n’ont ni espace, ni digit non numérique.
Je vais tester votre fonction et revenir vers vous pour confirmer
Merci
Thread Starter
alpha2
(@neoseeyou)
j’ai testé votre fonction et essayer de la modifier en conséquence mais cela ne fonctionne pas.
Plugin Author
Halyra
(@harasse)
Bonjour,
Après tests approfondis, oui en effet c’est trop combinatoire. il faut simplifier.
Directement dans la zone attribut du produit, déclarez ‘hstariff’ et donnez lui une valeur (seule la première d’une liste est prise en compte). Puis testez avec cela pour éventuellement forcer la valeur :
add_filter( 'cdi_filterarray_orderlist_before_metaboxcn23art','example2_cdi_filterarray_orderlist_before_metaboxcn23art', 10, 4) ;
function example2_cdi_filterarray_orderlist_before_metaboxcn23art ($arrayinitmetabox, $order, $valueshippingmethod, $item) {
global $woocommerce;
$product_id = $item['product_id'];
$product = wc_get_product( $product_id );
$attributes = $product->get_attributes() ;
foreach ( $attributes as $attribute ) {
$attribute_name = $attribute->get_name();
if ($attribute_name == 'hstariff') { // Check if it's the right taxo you are looking for
$attribute_value = $attribute->get_options()[0]; // Only the first in array
$arrayinitmetabox['_cdi_meta_cn23_article_hstariffnumber'] = $attribute_value ; // Update item order with data you want
break ;
}
}
return $arrayinitmetabox;
}
Thread Starter
alpha2
(@neoseeyou)
bonjour
Malheureusement cette deuxieme fonction ne semble pas fonctionner non plus
J’ai supplanté ce code à la place du votre
// Display Fields
add_action('woocommerce_product_options_general_product_data', 'woocommerce_product_custom_fields');
// Save Fields
add_action('woocommerce_process_product_meta', 'woocommerce_product_custom_fields_save');
function woocommerce_product_custom_fields()
{
global $woocommerce, $post;
echo '<div class="product_custom_field">';
// Custom Product Text Field
woocommerce_wp_text_input(
array(
'id' => 'hstariff',
'placeholder' => 'numéro HSTARRIF',
'label' => __('Hstarrif', 'woocommerce'),
'desc_tip' => 'true'
)
);
echo '</div>';
}
function woocommerce_product_custom_fields_save($post_id)
{
// Custom Product Text Field
$woocommerce_custom_product_text_field = $_POST['hstariff'];
if (!empty($woocommerce_custom_product_text_field))
update_post_meta($post_id, 'hstariff', esc_attr($woocommerce_custom_product_text_field));
}
Thread Starter
alpha2
(@neoseeyou)
Ok c’est parce que je n’ai pas entré de donnée dans la partie Attribut du produit utilisant une partie de ma précédente fonction qui m’ajoutait un input.
J’ai donc ajouté la donnée numérique dans un champ attribut du produit mais celui ci n’est pas été reporté sur le widget CDI au niveau du hstariff
-
This reply was modified 5 months, 2 weeks ago by alpha2.
Thread Starter
alpha2
(@neoseeyou)
Voici finalement une fusion entre votre fonction et ma précédente
// Display Fields
add_action('woocommerce_product_options_general_product_data', 'woocommerce_product_custom_fields');
// Save Fields
add_action('woocommerce_process_product_meta', 'woocommerce_product_custom_fields_save');
function woocommerce_product_custom_fields()
{
global $woocommerce, $post;
echo '<div class="product_custom_field">';
// Nonce field for security
wp_nonce_field('woocommerce_save_custom_fields', 'woocommerce_custom_fields_nonce');
// Custom Product Text Field
woocommerce_wp_text_input(
array(
'id' => 'hstariff',
'placeholder' => 'numéro HSTARRIF',
'label' => __('Hstarrif', 'woocommerce'),
'desc_tip' => 'true',
'description' => __('Enter the HSTARRIF number for this product.', 'woocommerce'),
'value' => get_post_meta($post->ID, 'hstariff', true)
)
);
echo '</div>';
}
function woocommerce_product_custom_fields_save($post_id)
{
// Verify nonce for security
if (!isset($_POST['woocommerce_custom_fields_nonce']) || !wp_verify_nonce($_POST['woocommerce_custom_fields_nonce'], 'woocommerce_save_custom_fields')) {
return;
}
// Check if the current user has permission to edit the product
if (!current_user_can('edit_post', $post_id)) {
return;
}
// Custom Product Text Field
$woocommerce_custom_product_text_field = isset($_POST['hstariff']) ? sanitize_text_field($_POST['hstariff']) : '';
// Save as custom field
update_post_meta($post_id, 'hstariff', esc_attr($woocommerce_custom_product_text_field));
}
add_filter('cdi_filterarray_orderlist_before_metaboxcn23art', 'example2_cdi_filterarray_orderlist_before_metaboxcn23art', 10, 4);
function example2_cdi_filterarray_orderlist_before_metaboxcn23art($arrayinitmetabox, $order, $valueshippingmethod, $item)
{
global $woocommerce;
$product_id = $item['product_id'];
$hstarrif_value = get_post_meta($product_id, 'hstariff', true);
if (!empty($hstarrif_value)) {
$arrayinitmetabox['_cdi_meta_cn23_article_hstariffnumber'] = $hstarrif_value; // Update item order with data you want
}
return $arrayinitmetabox;
}