wc_price ($ price) не показывает скидку от FILTER "woocommerce_product_get_regular_price" - PullRequest
2 голосов
/ 31 января 2020

С WooCommerce у меня есть следующая функция, которая позволяет мне делать скидки на цены моих продуктов:

add_filter('woocommerce_product_get_regular_price', 'custom_price' , 99, 2 );
function custom_price( $price, $product )
{
$price = $price - 2;
return $price
}

Это работает везде (в магазине, в корзине, в бэкэнд) , но не в моем плагине списка пользовательских товаров:

add_action( 'woocommerce_account_nybeorderlist_endpoint', 'patrickorderlist_my_account_endpoint_content' );
function patrickorderlist_my_account_endpoint_content() {

    //All WP_Query

    echo wc_price($price);
}

Показывает обычную цену без скидки. Обе части кода находятся в одном плагине.

1 Ответ

3 голосов
/ 31 января 2020

Для информации wc_price() - это просто функция форматирования, используемая для форматирования цен, и она не имеет ничего общего с главным аргументом $price. Ваша проблема в том, что во второй функции переменная $price определенно не использует метод WC_Product get_regular_price(), который требуется в вашем случае ... Так что в вашем WP_Query l oop вам нужно получить WC_Product экземпляр объекта, затем из этого объекта получите цену с помощью метода get_regular_price()

Так что попробуйте что-то вроде (это пример, поскольку вы не предоставляете свой WP_Query в своем вопросе) :

add_action( 'woocommerce_account_nybeorderlist_endpoint', 'rm_orderlist_my_account_endpoint_content' );
function rm_orderlist_my_account_endpoint_content() {

    $products = new WP_Query( $args ); // $args variable is your arguments array for this query

    if ( $products->have_posts() ) :
    while ( $products->have_posts() ) : $products->the_post();

    // Get the WC_Product Object instance
    $product = wc_get_product( get_the_id() );

    // Get the regular price from the WC_Product Object
    $price   = $product->get_regular_price();

    // Output the product formatted price
    echo wc_price($price);

    endwhile;
    wp_reset_postdata();
    endif;
}

Теперь все должно работать как положено.

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