我希望有人可以知道答案或指导我正确的方向。
我一直在寻找如何在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;)
当前代码效果很好,但目前仅允许一个自定义价格,我希望在不久的将来扩展这个以允许篮子内的许多自定义价格。当我进一步研究这个时,我会编辑这个
虽然下面的代码仅适用于我的更广泛的项目,但我希望这对其他人有益。作为捐赠页面会很棒。
(虽然我已经添加了评论和代码,如果有任何不清楚,不正确,误导或者如果您有任何更清洁的指示,请随时给予任何纠正我的信息,所有信用都将被给予)
为我糟糕的格式化而向所有人道歉,我通常是一个混乱的作家:/
//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;
}
答案 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;
}
但请注意使用此解决方案时的缓存。这可能会造成一些麻烦。