Показать страницу поста только если пользователь приобрел конкретный продукт.

Вопрос или проблема

У меня проблемы с Woocommerce. Мне нужно продавать видео. Я создал виртуальные продукты с ссылкой на отдельный пост для каждого (без загрузки, так как предпочитаю встраивать видео на свой сайт и использовать стриминг с YouTube/Vimeo). Я хотел бы, чтобы после покупки конкретного видео пользователь получал ссылку на конкретную страницу поста. До этого момента я знаю, как это сделать. Но эта страница должна быть видима только в том случае, если он уже купил ссылку. Поэтому, если он поделится ссылкой с кем-то другим или если кто-то найдет ссылку, он не сможет увидеть встроенное видео. Я не могу сделать это с ролями, потому что мне нужно было бы создать роль для каждого видео.

Поэтому мне нужно иметь цикл, в котором я сравниваю текущий ID страницы с пользовательским ID (или пользовательским полем, которое я могу добавить к каждому продукту) каждого продукта, купленного вошедшим в систему пользователем.

если (ID текущей страницы == пользовательский ID купленного продукта) то показать содержимое поста.

Возможно ли сделать что-то подобное?

Спасибо!

Да, это возможно.

В основном, вам нужно создать шаблон темы для любого типа поста, в котором показываются видео. (Если это страница, создайте шаблон страницы; если это пользовательский тип поста, создайте шаблон для этого типа поста). Вам нужно будет разработать конкретный запрос и код в зависимости от ваших плагинов, но в основном:

<?php
// Сначала проверьте, вошел ли пользователь в систему
if(is_user_logged_in()) {
    // Если он вошел, покажите общий заголовок сайта
    get_header();
    // Если он вошел, купил ли он этот конкретный продукт?
    // Сначала определите ID продукта
    // Затем проверьте, купил ли он этот продукт,
    // и сохраните это в переменную под названием $user_has_purchased
    // Затем добавьте условия для тех, кто купил его, и для тех, кто нет
    // Если они купили:
    if($user_has_purchased == true) {
        // Теперь добавьте ваш код для показа содержимого, которое может быть просто the_content
        if ( have_posts() ) :
            while ( have_posts() ) : the_post();
                the_content();
            endwhile;
        endif;
    } else {
        // Else здесь означает, что они вошли в систему, но не купили
        // Вы можете либо показать им сообщение со ссылкой, либо автоматически перенаправить
        // на страницу продукта, чтобы побудить их купить это
        echo "Извините, это содержимое доступно только по покупке.";
    }
    // Покажите общий нижний колонтитул сайта
    get_footer();
} else {
    // Else здесь означает, что они не вошли в систему
    // Поэтому вы можете либо связать с формой авторизации, либо перенаправить их туда
    wp_redirect( wp_login_url() ); exit;
}
?>

(Обратите внимание, что заголовок и нижний колонтитул показываются только если пользователь вошел в систему, потому что “else” говорит о перенаправлении их. Вы не можете перенаправить их, если уже вывели заголовок.)

Возможно, будет проще, если ваши страницы показа видео будут все пользовательским типом поста. Поскольку у вас есть single-posttype.php, настроенный с этими условиями, каждый раз, когда вы создаете один из этих CPT, он всегда будет проверять на вход в систему и покупку. Если же вы создадите шаблон страницы, который нужно будет применять вручную для каждой страницы, будет легче случайно забыть установить шаблон, и таким образом сделать ваше содержимое доступным для всех.

Следуя примеру WebElaine для части $user_has_purchased:

Создайте поле объекта поста, которое принимает только продукты и прикрепите его к пользователю. Теперь вы можете помещать конкретные продукты, которые покупает пользователь, в это поле. Когда пользователь переходит на страницу конкретного продукта, вы можете сделать запрос к текущему пользователю и проверить это поле, чтобы увидеть, содержит ли оно ID текущего продукта.

Ответ или решение

Как отобразить страницу поста только для пользователей, купивших конкретный продукт в WooCommerce

Ваша задача состоит в том, чтобы настроить отображение страниц с видео таким образом, чтобы к ним имели доступ только те пользователи, которые приобрели соответствующие виртуальные продукты. Я предоставлю шаги, которые помогут вам это сделать, с учетом всех ключевых аспектов, включая проверку покупок пользователей и создание кастомного шаблона.

Шаг 1: Проверка на наличие доступа пользователя

Первый шаг заключается в проверке, является ли пользователь залогинившимся и купил ли он конкретный продукт. Для этого можно использовать функцию woocommerce_order_get_items, чтобы проверить, есть ли у текущего пользователя активные покупки.

Шаг 2: Создание кастомного поля для связи продукта с постом

Чтобы сопоставить видео с продуктами, создайте новое кастомное поле для ваших постов. Это поле будет хранить идентификатор продукта, чтобы мы могли легко проверять, был ли этот продукт куплен пользователем.

В вашем коде это может выглядеть так:

function is_user_eligible_for_video($user_id, $product_id) {
    $orders = wc_get_orders(array(
        'customer_id' => $user_id,
        'status'      => 'completed',
    ));

    foreach ($orders as $order) {
        foreach ($order->get_items() as $item) {
            if ($item->get_product_id() == $product_id) {
                return true;
            }
        }
    }

    return false;
}

Шаг 3: Создание кастомного шаблона поста

Создайте файл шаблона для ваших страниц с видео. Например, если ваши видео размещены в кастомном пост-типе video, создайте файл single-video.php. В этом файле добавьте следующий код:

<?php
// Проверка на залогиненность пользователя
if (is_user_logged_in()) {
    get_header();

    // Получение текущего поста
    global $post;
    $current_product_id = get_post_meta($post->ID, 'related_product_id', true);

    // Проверка, купил ли пользователь продукт
    if (is_user_eligible_for_video(get_current_user_id(), $current_product_id)) {
        // Если пользователь купил продукт, отображаем контент
        if (have_posts()) :
            while (have_posts()) : the_post();
                the_content();
            endwhile;
        endif;
    } else {
        // Показать сообщение, если пользователь не купил продукт
        echo "<p>Извините, этот контент доступен только после покупки.</p>";
    }

    get_footer();
} else {
    // Перенаправление на страницу входа для незалогиненных пользователей
    wp_redirect(wp_login_url());
    exit;
}
?>

Шаг 4: Присвоение идентификаторов продуктов постам

При создании каждого видео-поста вам нужно будет установить значение кастомного поля, которое ссылается на ID соответствующего продукта. Это можно сделать вручную на экране редактирования поста или с помощью кастомного метабокса.

Заключение

Данная реализация подходит для передачи доступа к контенту только тем пользователям, которые приобрели связанные продукты. Система, основанная на проверки продукта через WooCommerce, позволяет автоматически управлять доступом на основе истории покупок пользователя. Обратите внимание, что безопасность в этом подходе имеет первостепенное значение, и стоит использовать HTTPS для защиты данных пользователей.

Используя предложенные шаги, вы сможете эффективно управлять доступом к вашим видео и сделать процесс покупки более безопасным и удобным.

Оцените материал
Добавить комментарий

Капча загружается...