Показывать цены со скидкой для участников, не являющихся участниками WooCommerce - PullRequest
2 голосов
/ 23 апреля 2019

В WooCommerce у меня есть 3 уровня членства (серебро, золото и платина), и я применил более высокую ставку дисконтирования для более высокого уровня членства.

Я хотел бы показать 4 разные цены (не для участников, серебро,золото и платина) каждому, чтобы они знали, сколько они могут сэкономить на каждом продукте, если присоединятся к членству.Например:

  • Обычная цена: $ 100
  • Серебряный участник: $ 90
  • Золотой участник: $ 80
  • Платиновый член: $ 70

Я попробовал код ниже :

function bsc_wc_memberships_members_only_product_price() {
    global $product;

    $user = wp_get_current_user();

    if ( !wc_memberships_is_user_active_member($user->ID, 'test') ) {

        $id = $product->get_id();
        $discount = get_post_meta( $id, 'member_price', true );
        $price = $product->get_price();

        echo 'Member price: $'.$total = $price - $discount;
    }

}
add_action( 'woocommerce_before_add_to_cart_button', 'bsc_wc_memberships_members_only_product_price' );

Но, к сожалению, это не работает ... Любой совет будет высоко оценен.

1 Ответ

1 голос
/ 23 апреля 2019

Существует очевидная ошибка в:

echo 'Member price: $'.$total = $price - $discount;

это должно быть просто:

echo 'Member price: $'. $price - $discount;

или даже лучше:

echo 'Member price: '. wc_price( $price - $discount );

Но так как это отображаемые цены, вам нужно использовать что-то немного другое и более полное, например:

add_action( 'woocommerce_before_add_to_cart_button', 'bsc_wc_memberships_members_only_product_price' );
function bsc_wc_memberships_members_only_product_price() {
    global $product;

    if ( ! wc_memberships_is_user_active_member( get_current_user_id(), 'test' ) ) {

        $discount     = wc_get_price_to_display( $product, array('price' => $product->get_meta('member_price') ) );
        $price        = wc_get_price_to_display( $product );

        $silver_price = $price - $discount;

        echo '<span class="silver-price">' . __('Member price') . ': ' . wc_price( $silver_price ) . '</span>';
    }
}

Проверка того, что мета-значение настраиваемого поля действительно существует в мета-ключе member_price для этого продукта в таблице базы данных wp_postmeta.

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Это должно работать лучше.

...