Обновите цены перед загрузкой магазина / списка товаров в WooCommerce - PullRequest
1 голос
/ 02 апреля 2019

В настоящее время я разрабатываю веб-сайт для торговой / оптовой компании, которая предлагает своим клиентам различные скидки (существует примерно 30 групп скидок).

Я использую WordPress / WooCommerce.

У меня есть доступ к прайс-листу каждого клиента через веб-сервис, который я успешно интегрировал.

В настоящее время я получаю цену и обновляю woocommerce с помощью хука 'woocommerce_before_shop_loop' .

Проблема, с которой я сталкиваюсь, заключается в том, что если все текущие цены в woocommerce установлены на уровне 1,00 долл. США, но цена, которую платит текущий клиент, составляет 2,00 долл. США, то при первой загрузке страницы она сообщает 1,00 долл. США до тех пор, пока она не будет перезагружена.

Я понимаю, что это потому, что запрос, очевидно, выполняется перед запуском как моего скрипта, так и загрузки страницы.

function t31_before_shop_list_call() {
    if ( is_user_logged_in()) {
        $Conn = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);


        $itemCodesArray = array(); // WILL CONTAIN ARRAY OF SKU's FOR WS

        while (have_posts()) : the_post();
            global $product;

            if( $product->is_type( 'simple' ) ){

                $sku = get_post_meta( get_the_ID(), '_sku', true );
                array_push($itemCodesArray, $sku);

            } elseif( $product->is_type( 'variable' ) ){

                $child_ids = $product->get_children();
                foreach ($child_ids as $child_id) {
                    $sku = get_post_meta( $child_id, '_sku', true );
                    array_push($itemCodesArray, $sku);

                }

            }

        endwhile; 

        ... RUN WEBSERVICE THAT GETS CLIENTS PRICES FOR THE 

        ... RUN THROUGH EACH PRODUCT RETURNED IN WEBSERVICE AND EXEC FOLLOWING UPDATE


       UPDATE wp_postmeta
       SET meta_value = " . $GDUSproduct_price . "
       WHERE post_id = " . $GDUSproduct_id . "
       AND meta_key = '_regular_price';";


        DELETE
        FROM `wp_options`
        WHERE (`option_name` LIKE '_transient_wc_var_prices_%'
        OR  option_name` LIKE '_transient_timeout_wc_var_prices_%')";

    }

}
add_action( 'woocommerce_before_shop_loop', 't31_before_shop_list_call', 15 );

Есть ли хук, который я могу использовать, который выполняется перед выполнением запроса, или есть способ выполнить повторный запрос до отображения html ??

...