Nab*_*fri 4 php wordpress woocommerce
我正在努力实现我自己的预订系统,我is_preorder为每个产品设置了一个自定义字段.
我试图修改WooCommerce的Is_Purchasable选项,这样,如果产品具有预订状态且已经超过预订截止日期,则无法购买.我尝试了很多方法,但似乎没有任何效果.
这是我做过的事(粗略的想法)
add_filter('woocommerce_is_purchasable', 'preorder_is_purchasable');
function preorder_is_purchasable() {
// this is a field added using 'Advance Custom Fields' plugin
$is_preorder = get_field('is_preorder');
if($is_preorder && "not yet passed deadline")
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
我不只是想禁用add_to_cart按钮,我也想禁用该功能(如果用户试图通过硬编码在url中添加产品,则应该提示错误).
我该怎么做呢?
================================================== =========================
这是我的最终代码:
add_filter('woocommerce_is_purchasable', 'preorder_is_purchasable', 10, 2);
function preorder_is_purchasable( $is_purchasable, $object ) {
// this is a field added using 'Advance Custom Fields' plugin
$is_preorder = get_field('is_preorder', $object->id);
// if product is Pre-Order
if($is_preorder)
{
$today = date('Ymd');
// another field added using 'Advance Custom Fields' plugin
$preorder_deadline = get_field('preorder_deadline', $object->id);
if($today <= $preorder_deadline) // if not yet pass deadline
return true;
else
return false;
}
else
return $is_purchasable; // normal
Run Code Online (Sandbox Code Playgroud)
bra*_*ilo 10
不确定它是否解决了问题,因为必须在您自己的自定义设置上进行测试.但你使用get_field错误:如果它没有在循环中使用,你应该提供帖子ID.
分析过滤器woocommerce_is_purchasable,我们看到它需要两个参数,一个boolean(is_purchasable)和一个对象(WC_Product).
试试这个:
add_filter('woocommerce_is_purchasable', 'preorder_is_purchasable', 10, 2);
function preorder_is_purchasable( $is_purchasable, $object ) {
// this is a field added using 'Advance Custom Fields' plugin
$is_preorder = get_field('is_preorder', $object->id);
if($is_preorder && $is_purchasable)
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
今天接受的答案有点过时了。
$object->id您应该使用$object->get_id(),而不是使用,否则您将收到有关不正确使用的 PHP 通知。
function disable_purchased_products( $is_purchasable, $object ){
// custom function to get the array of purchased products ID's
$already_purchased = get_purchased_products();
if( in_array( $object->get_id(), $already_purchased ) ){
return false;
} else {
return $is_purchasable;
}
}
add_filter( 'woocommerce_is_purchasable', 'disable_purchased_products', 10, 2 );
Run Code Online (Sandbox Code Playgroud)
我希望这会对某人有所帮助,我已经在网上看到了这个(过时的)代码。
| 归档时间: |
|
| 查看次数: |
7567 次 |
| 最近记录: |