WooCommerce wc_update_product_stock хранит число в базе данных как десятичное - PullRequest
0 голосов
/ 15 марта 2019

Когда я использую эту функцию

wc_update_product_stock();

для установки запаса товара всегда сохраняется числовое значение как число с плавающей запятой в моей базе данных.

Насколько я знаю, эта функция принимает три параметра

wc_update_product_stock(  $product,  $stock_quantity, $operation ); 

Но когда я использую это так

wc_update_product_stock( 2319 , 5 , 'set');

Он хранит значение 5 как 5.000000, и это происходит с любым другим числовым значением, которое я пытался использовать. number 5 stored as 5.000000 in database

Есть идеи, почему?

1 Ответ

1 голос
/ 15 марта 2019

Ниже приведена функция, которая обновляет товарный запас - она ​​использует %f в качестве количества запаса - поэтому его treated as float - подробнее

public function update_product_stock( $product_id_with_stock, $stock_quantity = null, $operation = 'set' ) {
        global $wpdb;
        add_post_meta( $product_id_with_stock, '_stock', 0, true );

        // Update stock in DB directly.
        switch ( $operation ) {
            case 'increase':
                // phpcs:ignore WordPress.VIP.DirectDatabaseQuery.DirectQuery
                $wpdb->query(
                    $wpdb->prepare(
                        "UPDATE {$wpdb->postmeta} SET meta_value = meta_value + %f WHERE post_id = %d AND meta_key='_stock'",
                        $stock_quantity,
                        $product_id_with_stock
                    )
                );
                break;
            case 'decrease':
                // phpcs:ignore WordPress.VIP.DirectDatabaseQuery.DirectQuery
                $wpdb->query(
                    $wpdb->prepare(
                        "UPDATE {$wpdb->postmeta} SET meta_value = meta_value - %f WHERE post_id = %d AND meta_key='_stock'",
                        $stock_quantity,
                        $product_id_with_stock
                    )
                );
                break;
            default:
                // phpcs:ignore WordPress.VIP.DirectDatabaseQuery.DirectQuery
                $wpdb->query(
                    $wpdb->prepare(
                        "UPDATE {$wpdb->postmeta} SET meta_value = %f WHERE post_id = %d AND meta_key='_stock'",
                        $stock_quantity,
                        $product_id_with_stock
                    )
                );
                break;
        }

        wp_cache_delete( $product_id_with_stock, 'post_meta' );
    }

Для обновления напрямую как целое число (как есть) - используйте эту функцию update_post_meta($product_id, '_stock', 15);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...