WPLife Wishlist Admin Addon: Как я добавил просмотр списков желаний в WooCommerce без Premium-версии

Если вы используете YITH WooCommerce Wishlist для создания вишлистов, но вам не хватает возможности просматривать списки пользователей в админке, эта статья для вас! Расскажу, как я решил эту проблему, создав бесплатный аддон WPLife Wishlist Admin Addon, и как его установить на ваш сайт.


❓ Зачем я создал этот плагин?

Я часто рекомендую клиентам YITH WooCommerce Wishlist — это удобный и быстрый плагин. Однако в бесплатной версии нет главной функции для администраторов — просмотра всех списков желаний, созданных пользователями. Платная версия решает проблему, но:

  • Не всем подходит цена — Сколько стоит плагин я не знаю, но кому-то и 1$ жалко для просмотра списков.
  • Доступ для РФ — автор плагина из Украины, и его сайт заблокирован для россиян.

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


🔍 Что умеет WPLife Wishlist Admin Addon

Аддон не заменяет YITH Wishlist, а дополняет его:
✅ Показывает все списки желаний в разделе админки WooCommerce → «Списки желаний».
✅ Нулевая нагрузка — код написан максимально просто, без лишних запросов.
✅ Совместимость с бесплатной версией YITH Wishlist, WordPress 5.6+ и WooCommerce 5.0+.
✅ Бесплатно и открыто — никаких платежей, подписок или скрытых функций.
После установки в админке WP появится меню «Списки желаний». Там вы увидите таблицу со всеми списками: название списка, пользователь, количество товаров, дата создания и т.д.


👉 Важно: Если вам нужен только мониторинг списков, мой аддон — идеальное решение. Для сложных задач (аналитика, экспорт) используйте официальный Premium.


📥 Установка за 3 шага

  1. Создайте папку wplife-wishlist-addon в /wp-content/plugins/.
  2. Добавьте файл index.php и вставьте в него [код].
  3. Активируйте плагин через раздел «Плагины» в WordPress.

Требования:

  • Должен быть установлен YITH WooCommerce Wishlist (бесплатная версия).
  • WordPress и WooCommerce последних версий.

❓ Частые вопросы

Q: Аддон будет работать, если обновится YITH Wishlist?
A: Да, если разработчики не изменят структуру таблиц в базе данных.

Q: Как удалить плагин?
A: Деактивируйте его в разделе «Плагины» и удалите папку wplife-wishlist-addon.

Q: Можно ли добавить экспорт списков?
A: Пока нет, но если будет запрос от пользователей — реализую. Пишите в комментарии!


💡 Почему я сделал это бесплатно?

  • Для сообщества — хочу, чтобы у всех был доступ к базовому функционалу.
  • Безопасность — никаких взломанных плагинов с вирусами.
  • Простота — иногда меньше = лучше.

🚀 Попробуйте сами!
Скопируйте код, который ниже. Если у вас есть идеи для улучшения — напишите мне в комментариях к этой статье.

Код плагина:

/*
Plugin Name: WPLife Wishlist Admin Addon
Plugin URI: https://wplife.ru/wplife-wishlist-admin
Description: Показывает списки желаний в админке. Для работы требуется бесплатный плагин YITH WooCommerce Wishlist. 
Version: 1.0
Author: Alexander Parkhomenko
Author URI: https://wplife.ru
License: GPL2
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: wplife-wishlist-addon
Domain Path: /lang
*/
// Добавление меню админки
add_action('admin_menu', 'wplife_wl_admin_menu');

function wplife_wl_admin_menu() {
    add_menu_page(
        'Списки желаний',
        'Списки желаний',
        'manage_options',
        'wplife_wl_admin_list',
        'wplife_wl_admin_list_page',
        'dashicons-heart',
        20
    );
}

// Страница админки
function wplife_wl_admin_list_page() {
    global $wpdb;
    
    // Таблицы
    $table_lists = $wpdb->prefix . 'yith_wcwl_lists';
    $table_wishlist = $wpdb->prefix . 'yith_wcwl';
    $table_users = $wpdb->users;

    // Получение данных из таблиц
    $lists = $wpdb->get_results("SELECT * FROM {$table_lists}", ARRAY_A);

    // Вывод данных в таблицу
    echo '<div class="wrap">';
    echo '<h1>Списки желаний</h1>';
    
    // Вывод таблицы со списками
    echo '<table class="widefat">';
    echo '<thead>
        <tr>
            <th>Имя</th>
            <th>Имя Пользователя</th>
            <th>Privacy</th>
            <th>Количество</th>
            <th>Дата</th>
            <th>Срок действия</th>
        </tr>
    </thead>';
    echo '<tbody>';

    foreach ($lists as $list) {
        $user = get_user_by('id', $list['user_id']);
        $username = $user ? $user->user_login : 'Гость';
        $privacy = $list['wishlist_privacy'] ? 'Приватный' : 'Публичный';
        
        // Получение количества товаров в списке
        $item_count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->prefix}yith_wcwl WHERE wishlist_id = %d",
            $list['ID']
        ));

        // Обработка случая, когда количество может оказаться NULL
        $item_count = $item_count ? $item_count : 0;

        // Получение кликабельного имени списка
        $wishlist_name = !empty($list['wishlist_name']) ? esc_html($list['wishlist_name']) : 'Мой список';
        $wishlist_link = get_site_url() . '/wishlist/view/' . $list['wishlist_token'];

        echo '<tr>';
        echo '<td><a href="' . esc_url($wishlist_link) . '" target="_blank">' . $wishlist_name . '</a></td>';
        echo '<td>' . esc_html($username) . '</td>';
        echo '<td>' . esc_html($privacy) . '</td>';
        
        // Кликабельное значение для количества товаров
        echo '<td><a href="#" class="toggle-items" data-wishlist-id="' . esc_attr($list['ID']) . '">' . esc_html($item_count) . '</a></td>';
        
        echo '<td>' . esc_html($list['dateadded']) . '</td>';
        echo '<td>' . esc_html($list['expiration']) . '</td>';
        echo '</tr>';

        // Запрос для получения товаров только для отображения под строкой
        if ($item_count > 0) {
            $items = $wpdb->get_results($wpdb->prepare(
                "SELECT prod_id,original_price FROM {$table_wishlist} WHERE wishlist_id = %d",
                $list['ID']
            ), ARRAY_A);
            
            echo '<tr class="item-list" style="display: none;"><td colspan="5">';
            echo '<h4>Товары в списке желаний:</h4>';
            echo '<ul>';
            foreach ($items as $item) {
                $product = wc_get_product($item['prod_id']);
                $original_price = $item['original_price'];
                $price = $product->get_regular_price();
                if ($product) {
                    $product_link = esc_url(get_permalink($product->get_id())); // Получаем ссылку на продукт
                    echo '<li>';
                        echo '<a href="' . $product_link . '" target="_blank">' . esc_html($product->get_name()) . '</a> '; // Название
                        echo 'Цена в списке: ' . $original_price . ' ';    // Цена из списка желаний
                        echo 'Цена текущая: ' . $price . ' ';    // Цена из списка желаний
                    echo '</li>';

                }
            }
            echo '</ul>';
            echo '</td></tr>';
        }
    }

    echo '</tbody>';
    echo '</table>';

    echo '</div>';
}

// Добавление CSS для стилей
add_action('admin_enqueue_scripts', function() {
    echo '<style>
        .item-list td {
            padding-left: 30px; /* Отступ для подстроки с товарами */
            background-color: #f9f9f9; /* Цвет фона для подстроки */
        }
        .item-list { display: none; } /* Скрыть по умолчанию */
        .toggle-items:hover { cursor: pointer; color: blue; text-decoration: underline; }
    </style>';
});

// Добавление скрипта для разворачивания/сворачивания списка товаров
add_action('admin_footer', function() {
    ?>
    <script>
    jQuery(document).ready(function($) {
        $('.toggle-items').on('click', function(e) {
            e.preventDefault();
            var $itemListRow = $(this).closest('tr').next('.item-list');
            $itemListRow.toggle(); // Переключение видимости
        });
    });
    </script>
    <?php
});

P.S. Если плагин вам помог — расскажите о нем в комментариях. Это вдохновляет на новые проекты!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх