WordPress

php — Jak VAR_DUMP zmienną $ podczas procesu realizacji transakcji (Czy meta mojego produktu jest wywoływalna?)

  • 11 kwietnia, 2020
  • 3 min read
php — Jak VAR_DUMP zmienną $ podczas procesu realizacji transakcji (Czy meta mojego produktu jest wywoływalna?)


Przepraszam chłopaki, musiałem opublikować to ponownie, ponieważ strona nie pozwalała mi odpowiadać na komentarze (nowe konto).

Pracowałem nad jakimś kodem, aby zmniejszyć ilość zmiennego produktu na podstawie wartości liczbowych niestandardowego pola.

Działa to dobrze, jednak zaimplementowałem pole wyboru, które zasadniczo WŁĄCZY/WYŁĄCZY funkcję w każdym produkcie. To niestandardowe pole wyboru również działa dobrze, pojawia się w „Ogólnych ustawieniach produktu” i dobrze przechowuje dane – potwierdziłem to za pomocą VAR_DUMP() na stronie produktu, która dokładnie zrzuca tak – (długość = 3).

Chociaż dane są przechowywane, wydaje mi się, że nie mogę ich użyć jako warunku, a gdy ten warunek jest spełniony, jeśli ( 'yes’ == $stock_weight_checkbox ) prawidłowe zmniejszenie ilości nie działa.

Wydaje mi się, że nie mogę uruchomić VAR_DUMP() podczas tego procesu, ponieważ ma to miejsce podczas potwierdzenia kasy, więc nie widzę, czy w tym momencie są tam wyświetlane jakieś wartości.

Moje założenia są następujące: Niewłaściwie wywołuję post_meta w tym obszarze (checkout). Być może to wywołanie działa na stronie produktu, ale czegoś mi brakuje lub sposób, w jaki podchodzę do wywołania, jest nieprawidłowy.

Warto przeczytać!  paginacja — następne i poprzednie posty tego samego rodzica

Jest to zmienny produkt, który szuka niestandardowego pola w obszarze Ustawienia ogólne podczas realizacji transakcji, w którym momencie jest niedostępny? (Zgadywać)

Poniżej znajduje się kod:

// reduce stock based on 'custom_field'

add_filter( 'woocommerce_order_item_quantity', 'filter_order_item_quantity', 10, 3 ); 
function filter_order_item_quantity( $quantity, $order, $item )  
{
    $product   = $item->get_product();
    $term_name = $product->get_meta( 'custom_field', true );
    $stock_weight_checkbox = $product->get_meta( '_stock_weight_checkbox', true );

    // 'pa_weight' attribute value is "15 grams" - keep only the numbers
    $quantity_grams = preg_replace('/[^0-9.]+/', '', $term_name);

    // new quantity
    if( 'yes' == $stock_weight_checkbox && is_numeric ( $quantity_grams ) && $quantity_grams != 0 )
        $quantity *= $quantity_grams;

    return $quantity;
}

function validate_attribute_weight( $passed, $product_id, $quantity, $variation_id = null, $variations = null ) {
    // Get custom field
    $weight = get_post_meta( $variation_id, 'custom_field', true );
    $stock_weight_checkbox = get_post_meta( get_the_id(),'_stock_weight_checkbox', true );

    if ( 'yes' == $stock_weight_checkbox && ! empty( $weight ) ) {
        // Get product object
        $product = wc_get_product( $product_id );

        // Get current product stock
        $product_stock = $product->get_stock_quantity();

        // ( Weight * quantity ) > product stock
        if( ( ( $weight * $quantity ) > $product_stock ) ) {
            wc_add_notice( sprintf( 'Sorry, you cannot add <strong>' . $weight .'</strong> of <strong>%1$s</strong> to the cart because there are only <strong>%2$sg</strong> left in our inventory. Please choose a lesser amount. We hope to have more in stock shortly.', $product->get_name(), $product_stock ), 'error' );
            $passed = false;
        }
    }

    return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'validate_attribute_weight', 10, 5 );

Czy ktoś może zauważyć, że coś jest nie tak? Lub przynajmniej daj mi znać, jak mogę wyświetlić VAR_DUMP() podczas procesu realizacji transakcji? (Jestem przyzwyczajony do wypluwania tego w jakiejś części mojej strony, np. na stronie produktu)

Warto przeczytać!  Wydarzenie z okazji 20. rocznicy UnlimitedWP WordPress za pośrednictwem WPLift's Eyes!


Źródło