Дата окончания заказа на платное членство Pro установлена ​​на «Никогда»

Я использую плагин платного членства pro для управления членством на разрабатываемом новостном сайте с пользовательской страницей регистрации, которая ведет к пользовательской странице цен (уровней) после успешной регистрации, которая использует встроенную js-библиотеку paystack вместо платежного шлюза для обработки платежей и после успешной оплаты класс MemberOrder используется для создания заказа, а также для обновления уровня членства пользователя.

Проблема, с которой мы сталкиваемся сейчас, заключается в том, что если пользователь подписывается на план членства с продолжительностью 30 дней, после проверки раздела «Заказы» в настройках платного членства Pro дата регистрации и начала назначаются успешно и точно, но дата окончания устанавливается на «Никогда» вместо даты 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();
        }
Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
1
0
80
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуй это:

// 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), а затем вычисляет дату окончания на основе номера истечения срока действия и периода.

Я прохожу через то же самое, и это не работает...

Beulah Akindele 05.04.2023 20:09
Ответ принят как подходящий

@Noel Bürgler Спасибо за ваш ответ, но он не может работать, поскольку класс MemberOrder не имеет свойства enddate. Тем не менее, я смог решить эту проблему после небольшого возни, и я решил поделиться ответом здесь, поскольку я заметил довольно много людей, сталкивающихся с одной и той же проблемой и не желающих платить за поддержку 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();

Надеюсь, это поможет кому-то еще решить ту же проблему, что и я :)

Да, это подход. Просто используйте глобальный $wpdb; вместо создания нового экземпляра mysqli.

mircobabini 03.05.2023 16:06

Другие вопросы по теме