付费会员资格专业会员资格订单结束日期设置为Never



我正在使用付费会员资格专业插件来管理一个正在开发的新闻网站的会员资格,该网站有一个自定义注册页面,在成功注册后会导致自定义定价(级别)页面,该页面使用paystack内联js库而不是支付网关来处理付款,并且在成功付款后,MemberOrder类用于生成订单并更新用户会员资格级别。

现在面临的问题是,如果用户订阅了30天的会员计划,在检查付费会员专业设置的"订单"部分后,注册和开始日期被成功准确地分配,但结束日期被设置为"从未";而不是开始日期后的30天。如何才能纠正这个问题,因为我已经完成了整个付费会员专业文档,但没有成功。

订单结束日期设置为开始日期后30天的日期,而不是"永不"。

// Update the membership level for the user
pmpro_changeMembershipLevel(substr($decrypted_data, 19, 1), $user_id); // Change membership level
if (!$order->payment_transaction_id) { 
// Query to check if order_id/payment_transaction_id already exists in database, in the event someone is trying to reuse a successful payment ID
$order->code = $order_id;
$order->user_id = $user_id;
$order->payment_transaction_id = $order_id;
$order->total = $membership_amount;
$order->membership_id = substr($decrypted_data, 19, 1);
$order->gateway = 'PayStack';
$order->status = 'success';
// Save object
$order->saveOrder();
}

@Noel brgler谢谢你的回答,但它不能工作,因为MemberOrder类没有一个结束日期属性。然而,经过一番折腾之后,我终于解决了这个问题,我决定在这里分享答案,因为我注意到很多人都面临着同样的问题,并且不想为此支付PMPRO支持费用。

下面是我是如何解决这个问题的:

// First, establish a database connection
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
$conn = new mysqli($servername, $username, $password, $dbname)
$plan_id = 1; //set your plan id
$expiration_date = date('Y-m-d', strtotime('+30 days')); //set your enddate
pmpro_changeMembershipLevel($plan_id, $user_id); //update user membership level
$order = new MemberOrder();
$order->code = $decoded_data->data->id;
$order->user_id = $user_id;
$order->payment_transaction_id = $decoded_data->data->reference;
$order->total = $decoded_data->data->amount / 100;
$order->membership_id = $plan_id;
$order->gateway = 'PayStack';
$order->status = 'success';
// Save object
$order->saveOrder(); //save order
// Next, define the update query to update enddate
$sql = "UPDATE wp_pmpro_memberships_users SET enddate = '$expiration_date' WHERE user_id = '$user_id'";
// Execute the enddate update query
$conn->query($sql);
// close the database connection
$conn->close();

希望这篇文章能帮助到和我有同样问题的人:)

试试这个:

// Update the membership level for the user
$level_id = substr($decrypted_data, 19, 1);
pmpro_changeMembershipLevel($level_id, $user_id); // Change membership level
// Get the level details to calculate the End Date
$level = pmpro_getLevel($level_id);
if ($level->expiration_number > 0) {
$end_date = date('Y-m-d', strtotime("+{$level->expiration_number} {$level->expiration_period}", current_time('timestamp')));
} else {
$end_date = '0000-00-00 00:00:00';
}
if (!$order->payment_transaction_id) {
// Query to check if order_id/payment_transaction_id already exists in database, in the event someone is trying to reuse a successful payment ID
$order->code = $order_id;
$order->user_id = $user_id;
$order->payment_transaction_id = $order_id;
$order->total = $membership_amount;
$order->membership_id = $level_id;
$order->gateway = 'PayStack';
$order->status = 'success';
$order->enddate = $end_date; // Set the End Date for the order
// Save object
$order->saveOrder();
}

它使用pmpro_getLevel($level_id)检索会员级别详细信息,然后根据过期号和周期计算End Date。

相关内容

最新更新