2017-02-06 13 views
2

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

Моя проблема заключается в том, что у меня есть 1 продукт то есть бесплатно, и мне нужно указать цену, если пользователь не вошел в систему.

Может кто-нибудь помочь мне настроить таргетинг на один продукт по его идентификатору и показать эту конкретную цену, даже если пользователь не вошел в систему.

Вот мой исходный код php в funcions.php, который блокирует цену за м, когда пользователь не вошел в систему:

// Hide prices on public woocommerce (not logged in) 
add_action('after_setup_theme','activate_filter') ; 
function activate_filter(){ 
    add_filter('woocommerce_get_price_html', 'show_price_logged'); 
} 
function show_price_logged($price){ 
    if(is_user_logged_in()){ 
     return $price; 
    } 
    else 
    { 
    remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart'); 
    remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10); 
    remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30); 
    remove_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10); 
    return '<a href="' . get_permalink(woocommerce_get_page_id('myaccount')) . '">Call for pricing</a>'; 
    } 
} 

Спасибо.

+0

У вас всегда есть фиксированный идентификатор продукта, для которого вы хотите показать цену? – rcadhikari

+0

да, я мог бы использовать идентификатор продукта. – MasterFuel

+0

reposted в wordpress dev. repo ... http://wordpress.stackexchange.com/questions/255438/have-woocommerce-show-product-price-if-id-when-not-logged-in – MasterFuel

ответ

0

Убирали немного и отведенной свой условный тест пользовательской функции называется so_42075748_hide_price(), которая проверяет, если пользователь вошел в систему и испытаний, если цена продукта является больше нуля. Я также отфильтровал woocommerce_is_purchasable, чтобы эти продукты полностью не были приобретены для кого-то, кто может знать, что вы можете просто сделать ?add-to-cart=99, чтобы добавить товар в корзину.

// Switch the Price HTML 
add_filter('woocommerce_get_price_html', 'so_42075748_hide_price_logged', 10, 2); 
function so_42075748_hide_price_logged($price, $product){ 
    if(so_42075748_hide_price($product)){ 
     // Not the ideal permalink in my opinion, but copying from original question. 
     $price = '<a href="' . get_permalink(woocommerce_get_page_id('myaccount')) . '">' . __('Call for pricing', 'your-textdomain') . '</a>'; 
    } 
    return $price; 
} 

// Make products completely unpurchasable 
add_filter('woocommerce_is_purchasable', 'so_42075748_is_purchasable', 10, 2); 
function so_42075748_is_purchasable($purchasable, $product){ 
    if(so_42075748_hide_price($product)){ 
     $purchasable = false; 
    } 
    return $purchasable; 
} 

// Hide add to cart buttons 
add_action('woocommerce_before_shop_loop_item', 'so_42075748_hide_prices'); 
add_action('woocommerce_before_single_product', 'so_42075748_hide_prices'); 
function so_42075748_hide_prices(){ 
    global $product; 

    if(so_42075748_hide_price($product)){ 
     remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart'); 
     remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30); 
    } 
} 

Отредактировано: Сделано более полное условное испытание, которое также проверяет, если цена равна нулю.

// Your condition for hiding products 
function so_42075748_hide_price($product = null){ 

    if(! is_object($product)){ 
     return true; 
    } 

    if(! is_user_logged_in()){ 

     $price = $product->get_price(); 

     if(! is_null($price) && $price > 0){ 
      return true; 
     } 

    } 

    return false; 

} 
+0

Спасибо! Кажется, что сработало, однако, когда я проверил продукт с вариациями, он, кажется, показывает варианты, но действует так, как будто этот элемент отсутствует на складе ... против скрытия кнопки добавления в корзину вместе. – MasterFuel

+0

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

+0

Я не рассматривал переменные продукты слишком сильно в своем ответе, но цена переменного продукта определяется из его вариаций. Какие цены у вас есть для вариантов? И можете ли вы 'var_dump ($ product-> get_price()) где-нибудь в функции' so_42075748_hide_prices() '? и дайте мне знать, что это говорит. – helgatheviking

 Смежные вопросы

  • Нет связанных вопросов^_^