Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 显示登录或特定产品的产品价格_Php_Wordpress_Woocommerce_Product_Price - Fatal编程技术网

Php 显示登录或特定产品的产品价格

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') ;

如果用户未登录,我有一些代码阻止在所有产品上显示价格

我的问题是,我有一个产品是免费的,我需要显示价格,如果用户没有登录

是否有人可以帮助我根据他的id定位单个产品,并显示此特定价格,即使用户未登录

以下是我在
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;

}