2017-02-06 113 views
2

我有一些代碼,阻止被顯示在所有的產品,如果用戶沒有登錄的價格。顯示產品的價格,如果是會員或特定產品

我的問題是,我有1個產品這是免費的,我需要顯示的價格,如果用戶沒有登錄。

有人可以幫助我通過他的id目標該單一產品,並顯示這個特殊的價格,即使用戶沒有登錄。

這是我的原始代碼funcions.php阻止價格來回m顯示,當用戶沒有登錄時:

// 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

您是否一直希望顯示價格的固定產品ID? – rcadhikari

+0

是的,我可以使用產品ID。 – MasterFuel

+0

在wordpress dev中重新發布。回購... 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); 
    } 
} 

編輯:取得了較爲完整的條件測試也考驗,如果價格是零。

​​
+0

謝謝!它似乎工作,但是當我檢查一個產品的變化,似乎顯示的選項,但行爲,如果物品缺貨...與隱藏添加到購物車按鈕所有在一起.. – MasterFuel

+0

實際上變量產品實際顯示價格..是由於沒有價格設定的事實?因爲它是可變的。 – MasterFuel

+0

在我的回答中,我沒有真正考慮可變產品太多,但是可變產品的價格是由它的變化決定的。你有什麼價格的變化?你可以'var_dump($ product-> get_price())'''so_42075748_hide_prices()'函數中的某處嗎?並讓我知道那是什麼意思。 – helgatheviking