• Resolved alpha2

    (@neoseeyou)


    Bonjour,

    Nous sommes finalement passé sur la derniere version de votre plugin (nous etions encore en 5.2.5).

    La transition ne semble pas poser de souci a part le CN23

    Le numéro HSTARRIF d’une fiche produit ne semblait pas se répercuter sur la metabox CDI d’une commande. Nous avions remediez à cela avec cette fonction mais qui ne semble plus fonctionner avec la nouvelle version de CDI. Avez vous modifier quelque chose à ce niveau? Pourriez vous nous aider?

    Merci

    // 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 ‘

    ‘; // Custom Product Text Field woocommerce_wp_text_input( array( ‘id’ => ‘hstariff’, ‘placeholder’ => ‘numéro HSTARRIF’, ‘label’ => __(‘Hstarrif’, ‘woocommerce’), ‘desc_tip’ => ‘true’ ) ); echo ”;
    }
    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));
    }

    • This topic was modified 5 months, 3 weeks ago by alpha2.
Viewing 7 replies - 1 through 7 (of 7 total)
  • 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;
    }
Viewing 7 replies - 1 through 7 (of 7 total)
  • You must be logged in to reply to this topic.