Php 显示登录或特定产品的产品价格
如果用户未登录,我有一些代码阻止在所有产品上显示价格 我的问题是,我有一个产品是免费的,我需要显示价格,如果用户没有登录 是否有人可以帮助我根据他的id定位单个产品,并显示此特定价格,即使用户未登录 以下是我在Php 显示登录或特定产品的产品价格,php,wordpress,woocommerce,product,price,Php,Wordpress,Woocommerce,Product,Price,如果用户未登录,我有一些代码阻止在所有产品上显示价格 我的问题是,我有一个产品是免费的,我需要显示价格,如果用户没有登录 是否有人可以帮助我根据他的id定位单个产品,并显示此特定价格,即使用户未登录 以下是我在functions.php中的原始php代码,当用户未登录时,它会阻止显示价格: // Hide prices on public woocommerce (not logged in) add_action('after_setup_theme','activate_filter') ;
functions.php
中的原始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>';
}
}
//隐藏公共商务上的价格(未登录)
添加动作(“在设置主题之后”,“激活过滤器”);
函数激活_过滤器(){
添加过滤器('woocommerce'u get'u price'u html','show'u price'u logged');
}
功能显示价格记录($price){
如果(用户是否已登录){
返回$price;
}
其他的
{
删除操作('woocommerce'u在'u shop'u loop'u item'之后,'woocommerce'模板'u loop'u将'u添加到'u cart');
删除行动('woocommerce\u single\u product\u summary'、'woocommerce\u template\u single\u price',10);
删除操作('woocommerce\u single\u product\u summary'、'woocommerce\u template\u single\u add\u to\u cart',30);
删除操作('woocommerce'u在'u shop'u loop'u item'u title'之后,'woocommerce'u模板'u loop'u price',10);
返回“”;
}
}
谢谢。将您的条件测试简化为一个名为
的自定义函数,因此\u 42075748\u hide\u price()
该函数测试用户是否登录,并测试产品价格是否大于零。我还过滤了woocommerce\u is\u purchable
,使这些产品完全无法被那些知道您只需执行?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 );
}
}
你总是有固定的产品id,你想显示价格吗?是的,我可以使用wordpress dev.repo中的产品id。。。不值得转售。这是特定于WooCommerce的,可能会在WordPress堆栈中关闭。谢谢!它似乎起了作用,但是当我检查一个有变化的产品时,它似乎显示了选项,但好像该产品已经脱销了。。。vs.将“添加到购物车”按钮隐藏在一起..实际上可变产品实际上显示价格。。这是因为没有定价吗?因为它是可变的。在我的回答中,我没有真正考虑变量产品,但是变量产品的价格是根据它的变化来确定的。这些变体的价格是多少?你能在
so\u 42075748\u hide\u prices()函数中的某个地方var\u dump($product->get\u price())
吗?让我知道这是怎么说的。我有很多不同的价格,取决于产品。。。。不确定如何处理var_转储感谢Helga,我不确定如何处理var转储,虽然我现在有一个可行的解决方案,但它不使用可购买的过滤器。。。我很喜欢你建议使用的过滤器。。。但是,在这种情况下,如果他们要将该字符串添加到url中,那么订单将不会完全填充
// 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;
}