Существует очевидная ошибка в:
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 вашей активной дочерней темы (или активной темы). Это должно работать лучше.