如果订阅有效时间少于 3 个月,则暂时删除取消按钮

2024-04-02

我需要一些帮助来暂时删除“我的帐户”内“我的订阅”页面中的取消按钮。我想隐藏取消按钮,直到至少 3 个月后自用户订阅以来(或 90 天)。订阅3个月后,取消按钮将再次出现。

使用:Woocommerce 与 Woo 订阅和 Woo 会员资格一起使用

我发现了另一个问题,该问题已得到解答,但无论我如何编辑它,我似乎都无法使代码正常工作(在 WooCommerce 中禁用单个订阅的取消订阅 https://stackoverflow.com/questions/58486397/disable-cancel-subscription-for-single-subscription-in-woocommerce). 下面的第一段代码来自链接.

function sv_edit_my_memberships_actions( $actions ) {
    // Get the current active user
    $user_id = wp_get_current_user();

    if(!$user_id) // No valid user, abort
        return $actions;

    // Only query active subscriptions
    $memberships_info = wc_memberships_get_user_active_memberships($user_id, array( 
        'status' => array( 'active' ),
    ));

    // Loop through each active subscription
    foreach ($memberships_info as $membership) {
        $subscription_start_date = date("Y/m/d", strtotime($membership->get_start_date()));
        //$subscription_end_date = date("Y/m/d", strtotime($membership->get_end_date()));
        //$subscription_name = $membership->get_plan()->get_name();
        //$subscription_id = $membership->get_plan()->get_id();

        if($subscription_id == 'YOUR_ID') { // Active subscription
            // Compare the starting date of the subscription with the current date
            $datetime1 = date_create($subscription_start_date);
            $datetime2 = date_create(date(time()));

            $interval = date_diff($datetime1, $datetime2);

            if($interval->format('%m') <= 11) {
                // remove the "Cancel" action for members
                unset( $actions['cancel'] );
            }
        }
    }
   return $actions;
}

我已经能够使用下面的代码隐藏取消按钮,但是它无限期地隐藏它:

function remove_cancel_button( $actions, $subscription ) {

        foreach ( $actions as $action_key => $action ) {
          switch ( $action_key ) {
            case 'cancel':          // Remove the cancel button
                unset( $actions[ $action_key ] );
                break;
            default: 
                error_log( '-- $action = ' . print_r( $action, true ) );
                break;
          }
        }

        return $actions;
    }
    add_filter( 'wcs_view_subscription_actions', 'remove_cancel_button', 100, 2);

我已阅读找到的相关开发人员文档here https://docs.woocommerce.com/document/subscriptions/develop/并更改您的代码,以便它使用当前网站日期并将其与订阅日期进行比较。

如果差异小于 3 个月,取消按钮将保持隐藏状态,直到差异至少为 3 个月。

请注意,我使用了'last_payment'要比较的日期,其他可能使用的选项是'start', 'trial_end', 'next_payment', 'last_payment' or 'end'。 了解更多相关信息here https://docs.woocommerce.com/document/subscriptions/develop/functions/#section-3.

/**
 * Remove cancel button ( When last payment was less then 3 months ago )
 *
 * @param array $actions, action array.
 * @param int $subscription_id, the id of the current subscription.
 * @return array $actions, the altered action array.
 */
function remove_cancel_button( $actions, $subscription_id ) {

  // Gets the subscription object on subscription id
  $subscription = new WC_Subscription( $subscription_id );

  // Get last payment date from subscription object, uses the sites timezone setting
  $last_payment_date = $subscription->get_date( 'last_payment', 'site' );
  $last_payment_date = new DateTime( $last_payment_date );

  // The current date/time, uses the sites timezone setting
  $today = new DateTime( current_time('mysql') );

  // Get the difference in date
  $interval = $today->diff( $last_payment_date );

  // Check if interval is less then 3 months
  if( $interval->m < 3 ){
    unset( $actions['cancel'] );
  }

  // Return the actions
  return $actions;
}
add_filter( 'wcs_view_subscription_actions', 'remove_cancel_button', 100, 2);

希望这对您有所帮助,如果有任何不清楚的地方请告诉我。

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

如果订阅有效时间少于 3 个月,则暂时删除取消按钮 的相关文章

  • WordPress 网站上出现数据库错误“一个或多个数据库表不可用”

    Error One or more database tables are unavailable The database may need to be repaired 我怎么解决这个问题 wp config php 是正确的 我使用
  • 按类别 ID 获取产品

    我正在为 woocommerce 编写一个定价表插件 用户插入带有 woocommerce 产品类别 ID 的短代码 更新页面后 用户可以看到一个包含产品名称和价格列表的表格 我怎样才能获得带有类别ID的产品列表 在下面的代码中 pid是用
  • mod_rewrite :如果/否则输入 RewriteRule

    以下重写将以数字 4 开头的字符串作为变量传递给 process php RewriteCond REQUEST FILENAME f RewriteCond REQUEST FILENAME d RewriteRule 4 process
  • 如何以编程方式获取 WooCommerce 中的所有产品?

    我想获取 WooCommerce 中的所有产品数据 产品 sku 名称 价格 库存数量 可用性等 我可以使用 wp query 来做到这一点吗 这样你就可以通过 wp query 获取所有产品 global wpdb all product
  • 在 Woocommerce 购物车中设置最小小计金额

    我正在尝试将最低订单金额设置为 25 美元 到目前为止 我找到了这段代码 如果未达到最低限度 它似乎可以阻止结账 但它使用的小计包含税费 我需要在总计中排除税费 add action woocommerce checkout process
  • 删除 woocommerce 店面主页标题 php

    我正在使用 woocommerce 的店面主题 我需要用 php 删除主页标题 h1 我知道 css 解决方案 但我不想使用它 因为我想将 h1 添加到该页面的其他位置 并且在一个页面中包含 2 个 h1 对 seo 不利页 我也知道删除页
  • 如何纠正这个非法字符串偏移?

    我收到此错误 警告 第 32 行 home mysite public html wp content themes evento lib php extra class php 中的非法字符串偏移 type 我意识到文件中的这部分代码是错
  • 在 WooCommerce 中添加到购物车之前清空购物车

    我正在使用 WP 作业管理器和 Woo Subscriptions Now 最初 我选择了一个套餐 Woo Subscription 然后我添加了所有细节 但没有提交 回到网站 所以要再次购买 我需要选择一个套餐 于是我选择了套餐并填写了详
  • WordPress 插件滑块革命错误

    我无法摆脱以下错误 我激活插件后出现错误 Slider Revolution error could not unzip into the revslider public assets folder please make sure th
  • 根据类别 woocommerce 更改同一产品的默认变体值

    我正在研究一种根据其所属类别显示同一产品的默认变体值的方法 例如 我出售一张带有蓝色和红色选项的卡 当用户进入 一 类别时 我希望默认值为蓝色 如果他属于第二类 则该值将为红色 我发现了一个钩子woocommerce product def
  • 如何使 WordPress 主题全宽?

    我尽了最大努力 但无法通过编辑 CSS 使以下主题全宽 屏幕 如果您能向我展示或给我有关此定制的提示 我将不胜感激 http demo mythemeshop com sociallyviral http demo mythemeshop
  • 如何在 WordPress 中设置发布日期的格式?

    我有一个侧边栏 我想在其中显示最新的帖子 现在它显示标题 日期和摘录 日期显示了我想要删除的时间 我用这个显示日期 recent post date
  • 如何防止 CSS 或 jQuery 中单词和标点符号之间的换行

    我在一个段落中有一些文字 我的问题是 当标点符号位于单词末尾时 有时可以换行到下一行 像这样 This is the text This is a new line 我可以用 CSS 或 jQuery 解决这个问题吗 如果您不在单词和标点符
  • WordPress - 类别和子类别的嵌套列表

    我正在尝试显示带有嵌套子类别的 WordPress 类别列表 到目前为止 我只能获取父类别列表或不包括父类别的子类别列表 但我无法将两者连接在一起 这是我想要创建的结果 Parent Category 子类别 子类别 Parent Cate
  • 管理产品页面自定义字段显示在购物车和结账中

    我在产品页面的常规设置选项卡上的 WooCommerce 管理中创建了一个自定义字段 以插入几天的制造时间 我想在购物车和结帐页面上每个产品名称上方显示此自定义字段值 这是我的代码 Insert a Custom Admin Field f
  • 在 WordPress 中使用 jquery 日期选择器

    我想要在我的 WordPress 模板页面的表单中使用日期选择器 但它不起作用 这是我的子主题functions php的代码 function modify jquery if is admin comment out the next
  • 按值或 ID 选择更多复选框

    我有这段代码 我想在其中创建一个切换按钮来选择 2 个或更多复选框 例如 意大利和德国 我正在尝试这段代码 但我无法让它工作 document on click checkbox button function e var checks i
  • WooCommerce 从购物车中删除所有产品并将当前产品添加到购物车

    我是 WooCommerce 新手 我只需要能够在购物车中添加一种产品 我想在单击 添加到购物车 按钮时清除所有产品并将当前产品添加到购物车 我怎样才能做到这一点 我对此有一个确切的解决方案 尝试以下代码 add filter woocom
  • 使用数据绑定,如何将包含表情符号的文本绑定到标签并使其正确显示?

    我正在编写一个应用程序来连接 WordPress BuddyPress API 该应用程序将允许用户通过 API 相互发送消息 当这些消息包含表情符号时 我很难正确显示它们 以下是 API 返回的消息文本的简短示例 Hi x1f642 ho
  • wp_enqueue_script 用于小部件表单

    我正在创建一个小部件 我需要在管理面板 和定制器 中将小部件表单的脚本排入队列 我尝试了很多方法 function cf enqueue admin script wp enqueue script admin custom script

随机推荐