让 is_purchasable 挂钩也适用于 Woocommerce 产品变体

2023-12-31

我创建了 2 个自定义产品字段 - 可用性 - 从何时/到何时。因此,如果当前日期在这些设定的可用日期之间,则产品是可购买的,否则 - 则不可购买。一切都很完美,但只有在我发布具有变化的产品之前。然后,就像产品变体忽略这些自定义可用性字段/值一样,即使当前日期不在设置的可用性日期之间,仍然可以向购物车添加变体。

function hide_product_if_unavailable( $is_purchasable, $object ) {

  $date_from = get_post_meta( $object->get_id(), '_availability_schedule_dates_from' );
  $date_to = get_post_meta( $object->get_id(), '_availability_schedule_dates_to' );
  $current_date = current_time('timestamp');

  if ( strlen($date_from[0]) !== 0 ) {

    if ( ( $current_date >= (int)$date_from[0] ) && ( $current_date <= (int)$date_to[0] ) ) {

      return true;

    } else {

      return false;

    }

  } else {

    # Let adding product to cart if Availability fields was not set at all
    return true;

  }

}
add_filter( 'woocommerce_is_purchasable', 'hide_product_if_unavailable', 10, 2 );

我尝试在下面添加另一个过滤器woocommerce_is_purchasable:

add_filter( 'woocommerce_variation_is_purchasable', 'hide_product_if_unavailable', 10, 2 );

但变化仍然忽略可用性字段。


对所有产品类型(包括产品变体)尝试此重新访问的代码:

add_filter( 'woocommerce_is_purchasable', 'purchasable_product_date_range', 20, 2 );
function purchasable_product_date_range( $purchasable, $product ) {
    $date_from = (int) get_post_meta( $product->get_id(), '_availability_schedule_dates_from', true );
    $date_to = (int) get_post_meta( $product->get_id(), '_availability_schedule_dates_to', true );
    if( empty($date_from) ||  empty($date_to) )
        return $purchasable; // Exit (fields are not set)

    $current_date = (int) current_time('timestamp');
    if( ! ( $current_date >= $date_from && $current_date <= $date_to ) )
        $purchasable = false;

    return $purchasable;
}

To make 产品变化你需要得到的工作父产品 ID,因为您的变体没有此日期范围自定义字段:

add_filter( 'woocommerce_variation_is_purchasable', 'purchasable_variation_date_range', 20, 2 );
function purchasable_variation_date_range( $purchasable, $product ) {
    $date_from = (int) get_post_meta( $product->get_parent_id(), '_availability_schedule_dates_from', true );
    $date_to = (int) get_post_meta( $product->get_parent_id(), '_availability_schedule_dates_to', true );
    if( empty($date_from) ||  empty($date_to) )
        return $purchasable; // Exit (fields are not set)

    $current_date = (int) current_time('timestamp');
    if( ! ( $current_date >= $date_from && $current_date <= $date_to ) )
        $purchasable = false;

    return $purchasable;
}

代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让 is_purchasable 挂钩也适用于 Woocommerce 产品变体 的相关文章

  • CodeIgniter 自定义库未加载

    我是 CodeIgniter 的新手 并尝试用它开发一个相当简单的应用程序 只是一个用于处理想要娱乐中心通行证的员工的注册的表单 我正在尝试将事物分开以使它们更清晰 这是代码 应用程序 控制器 reccenter php class Rec
  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • 按文件名对 $_FILES 进行排序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 他俩 如您所知 在新的 HTML5 中 您可以非常轻松地上传多个文件 但我这里的问题是如何按列 名称 对 FILES 数组进行排序 这是
  • AWS-PHP-SDK / SNS 直接寻址返回错误

    您好 我正在使用 Laravel 4 设置来利用 AWS SNS 向我的 iOS 设备发送推送消息 从 AWS 控制台向我的设备发布命令效果很好 然后我尝试从 PHP sns AWS get sns sns gt publish array
  • 您的要求无法解析为 laravel 的一组可安装软件包

    我使用 5 7v Laravel 和 7 2 1v PHP 和 Composer 最新版本 但是当我想创建新项目时出现这些错误 Your requirements could not be resolved to an installabl
  • 在哪里可以学习网络编程从入门到精通? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我尝试做教程 但它是无组织且无结构的 我在哪里可以学习 PHP 从初学者到大师 我正在寻找类似的网站w
  • 分页显示所有其他页面上第 1 页的相同帖子

    我最近在创建即将发生的事件列表时得到了很多帮助 请参阅此处显示即将举行的活动 包括今天的活动 https stackoverflow com questions 17343615 showing upcoming events includ
  • 使用 XPATH(和 PHP)从样式属性中选择背景 url

    我只想从此背景图像样式属性中选择 url 这可以通过 XPATH 实现吗 a href http www test com style background image none test a 我有类似的东西 url xpath gt qu
  • Facebook PHP-SDK 页面刷新后似乎丢失了 userID

    我似乎登录工作正常 我可以登录 接受应用程序 第一次 然后显示用户信息 例如姓名 图片 等 然而 当我刷新页面时 userid 又回到 0 我必须再次登录 我不确定问题是什么 我必须在每次页面加载时重新启动它还是什么 我不知道 我会发布一些
  • Facebook API sdk 4.0 - 将照片发布到 Facebook

    我正在尝试创建一个应用程序 用户可以在其中浏览照片并将其从计算机提交到 Facebook 为此 他们首先必须将照片上传到服务器 然后使用 Facebook 请求将此图像发布到 Facebook 我正在使用多部分 表单数据 这就是我到目前为止
  • 带倒计时的php循环

    假设我从 400 开始计数器 我将如何执行一个向后运行直到 0 的 foreach 循环 伪代码 i 400 foreach SOMETHING do stuff i for i 400 i gt 0 i do stuff 其他方法 i 4
  • CodeIgniter:My_Lang 中的 get_instance

    我发现这个有用的国际化代码 http pastebin com SyKmPYTX http pastebin com SyKmPYTX 一切正常 除了我无法在此类中使用 CI 函数 我想从 DB 设置 languages 和 special
  • 从 Laravel 4 输入生成新数组

    我使用 Input all 从动态生成的表单中获取一些输入 我使用 jQuery 来允许用户添加字段 字段名称为 first names last names 和 emails input 变量现在看起来像这样 array size 4 t
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推
  • 使用会话 php 创建 cookie?

    我使用会话来登录我网站中的用户 问题是 我想让用户remember密码 因此关闭 打开浏览器后他们不需要再次登录 我需要使用 cookie 和 session 来实现它吗 my code user POST user pass POST p
  • PHP 拒绝从 var_dump、print 等输出数据

    我目前正在运行 WAMP 服务器 并且在过去的 30 分钟内一直在尝试弄清楚我的项目如何以及为什么不会输出任何指定的 PHP 数据 起初我以为是因为我有一个 htaccess文件的output buffering被禁用 所以我删除了它 仍然
  • 矩形超出边界是什么意思

    PPB Graphics2D PaintImageData 矩形超出界限是什么意思 我几乎在我检查的每一段代码中都看到了它 最新的代码是 define my consumer key define my consumer secret oa
  • 如何在 PHP 5.6 中通过 php.ini 设置“verify_peer_name=false”SSL 上下文选项

    案例 我想打开 SSL 连接localhost而 SSL 证书是 FQDN 的问题 问题 没有进行特殊处理就行 下面的程序失败并显示以下消息 PHP Warning stream socket enable crypto Peer cert
  • 联系表格 7 自动添加 p 标签

    我在联系表单 7 编辑器中有下一个代码 div class row div class col sm 8 col sm offset 2 div class row div class col sm 4 text name class bo
  • PayPal 网关已拒绝请求。安全标头无效(#10002:安全错误 Magento

    在 magento 中增加 PayPal 预付款 我已填写 magento admin 中的所有凭据 但是当我进入前端并单击 pay pal 按钮时 它给出了 PayPal 网关已拒绝请求 安全标头无效 10002 安全错误 我用谷歌搜索了

随机推荐