Woo Commerce钩子只为当前用户更新价格。 PHP

时间:2014-07-01 17:58:32

标签: php wordpress wordpress-plugin woocommerce

我希望有人可以知道答案或指导我正确的方向。

我一直在寻找如何在wordpress的woo commerce插件上创建动态定价的失败。 (显示的示例是一个通过用户输入更新定价的简单表单,但最终将是从上传文件创建的价格) 特定于用户/会话

$getcost= $_POST['cost'];
echo "<form action=\"#\" method=\"POST\"><input type=\"text\" name=\"cost\"><button type=\"submit\">Price me</button>";
global $post, $woocommerce;
    $post_id = $post->ID;
    if($post_id == '34'){
$customPrice= $getcost;

使用更新帖子元我可以更改价格,但这会改变每个人的价格。

update_post_meta($post_id,'_price', $customPrice);

我只是想改变所以它只适用于使用它的人,可能是基于会话,或者是用户购物篮(购物车) 很高兴收到任何有此方法的人。 提前感谢你做你(AKA&#34;伟大&#34;)

感谢精彩的&#39; Pelmered&#39;对他的帮助。我想我会添加我一直在玩的编辑代码给其他人看。

当前代码效果很好,但目前仅允许一个自定义价格,我希望在不久的将来扩展这个以允许篮子内的许多自定义价格。当我进一步研究这个时,我会编辑这个

虽然下面的代码仅适用于我的更广泛的项目,但我希望这对其他人有益。作为捐赠页面会很棒。

(虽然我已经添加了评论和代码,如果有任何不清楚,不正确,误导或者如果您有任何更清洁的指示,请随时给予任何纠正我的信息,所有信用都将被给予)

为我糟糕的格式化而向所有人道歉,我通常是一个混乱的作家:/

//You all know what a form is, but just incase you want a clearer Idea of what is happening, here it is :)
<form action="#" method="POST">
<input type="text" name="cost">
<button type="submit">Please take my money</button>

//I store my dynamic price in a cookie, as my test price is just coming from a simple
//form that posts to self, but If you don't want this, skip this function&action

      //loads the function
add_action( 'init', 'SetQuoteInfo');             

     //gets the posted data(if available) and sets cookie value
function SetQuoteInfo(){                                            
 if(!empty($_POST['cost'])){                                                    
     setcookie("QuoteMe", $_POST['cost']);                                      
 }                                                                              
   }                                                                                                                                                            

    //Price is filtered to be the new values instructed by my_custom_price()                                                                                  
add_filter('woocommerce_get_sale_price', 'my_custom_price', 99);                   
add_filter('woocommerce_get_price', 'my_custom_price', 99);                        

    //New price is created                            
function my_custom_price( $orginal_price )                                         
             {                                                                  
                     global $post, $woocommerce;
    // Checking the posted data first ensures that price data is not taken from previous cookie data so it is always new/overridden posted data(if posted by user)
                     If(!empty($_POST['cost']))                                 
                    $new_price = $_POST['cost'];                                
else {                                                                             
   $new_price =  $_COOKIE['QuoteMe']; //Gets data from cookie if no new posted value                      
     }                                                                                  
return $new_price;                                                                 
             }     

1 个答案:

答案 0 :(得分:2)

update_post_meta()会为每个用户永久更新价格。全局(针对每个用户)动态更新价格的更好方法是:

$product = new WC_Product( $id );
$product->set_price( 99 ); //set the price to 99 for the product

但在这种情况下(个人用户的更新),我认为你应该这样做:

add_filter('woocommerce_get_sale_price', 'my_custom_price', 99);
add_filter('woocommerce_get_price', 'my_custom_price', 99);

function my_custom_price( $orginal_price )
{
    global $post, $woocommerce;

    //your logic for calculating the new price here
    $new_price = $orginal_price / 2;

    //Return the new price (this is the price that will be used everywhere in the store)
    return $new_price;
}

但请注意使用此解决方案时的缓存。这可能会造成一些麻烦。