Как отслеживать действия экспорта для каждого пользователя с помощью плагина WPDataTables в WordPress?

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

Предлагает ли плагин WPDataTables встроенную функцию подсчета действий экспорта для каждого пользователя? Если нет, существует ли рекомендуемый подход или обходной путь для реализации этой функции?

Спасибо за помощь!:)

——

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

Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
0
0
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы можем использовать обходной подход для достижения необходимой функциональности. В этом подходе мы будем использовать мета-данные пользователя WordPress для отслеживания действий экспорта для каждого пользователя.

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

Шаг 1: Здесь нам нужно добавить custom JavaScript в JS-файл темы, чтобы обнаруживать нажатия на кнопку экспорта и отправлять AJAX request в server. Здесь '#table_1_wrapper' — идентификатор таблицы.

jQuery(document).ready(function($) {
    var ajaxurl = 'https://gomarketish.com/wp-admin/admin-ajax.php'; // Replace with your actual AJAX URL

    $('#table_1_wrapper').on('click', '.buttons-csv, .buttons-excel, .buttons-pdf', function() {
        $.ajax({
            url: ajaxurl,
            type: 'POST',
            data: {
                action: 'track_export_action'
            },
            success: function(response) {
                console.info('Export action has been tracked.');

                // Check if response is a string and equals to 'You have reached your max. export limit.'
                if (typeof response === 'string' && response.trim() === 'You have reached your max. export limit.') {
                    // Hide buttons with class 'DTTT_button_export'
                    $('.DTTT_button_export').hide();
                }
            }
        });
    });
});

Шаг 2. Здесь мы добавляем специальную функцию в файл functions.php вашей темы для обработки запроса AJAX и обновления метаданных пользователя.

function track_user_export_action() {
    if (is_user_logged_in()) {
        $user_id = get_current_user_id();
        $export_count = get_user_meta( $user_id, 'export_count', true );

        if (!$export_count) {
            $export_count = 0;
        }

        $export_count++;
        update_user_meta( $user_id, 'export_count', $export_count );

        wp_send_json_success( 'Export action tracked' );
    } else {
        wp_send_json_error( 'User not logged in' );
    }

    wp_die();
}

add_action( 'wp_ajax_track_export_action', 'track_user_export_action' );

Шаг 3. Здесь нам нужно добавить проверку, чтобы увидеть, превысил ли пользователь свой лимит экспорта, прежде чем разрешить действие экспорта. Это также необходимо добавить в файл functions.php вашей темы.

function set_limit_export_actions() {
    if (is_user_logged_in()) {
        $user_id      = get_current_user_id();
        $export_count = get_user_meta($user_id, 'export_count', true);
        $max_exports  = 10; // Set your limit here

        if ($export_count >= $max_exports) {
            wp_die( 'You have reached your max. export limit.' );
        }
    }
}

add_action('wp_ajax_track_export_action', 'set_limit_export_actions', 1);

Пожалуйста, дайте мне знать, если это поможет.

К сожалению, у меня это не сработало. Я пробовал обновить сайт до и после экспорта, а также использовать разные таблицы, но экспорт не блокируется после достижения установленного мной предела. Чтобы предоставить более подробную информацию, я вставил код из первого шага в файл Hello-frontend.js (imgur.com/a/hsNYDLT ), а шаги 2 и 3 — в файл function.php ( imgur.com/a/akmj2vW). Спасибо, Нарендра :) Миа

Mia 02.07.2024 17:22

Не могли бы вы поделиться URL-адресом веб-сайта, чтобы я мог рассмотреть его поближе?

Narendra Sishodiya 02.07.2024 17:31

Конечно! (gomarketish.com ). Вы можете просто зарегистрироваться, а затем увидеть таблицу данных.

Mia 02.07.2024 18:10

Я внедрил новый код из первого шага, который вы предоставили, в gomarketish.com/wp-content/themes/hello-elementor/assets/js/‌​… для панели мониторинга пробной версии. К сожалению, опция экспорта по-прежнему не блокируется после 10 операций экспорта...

Mia 02.07.2024 20:50

Код не работает, потому что он неправильный id, поэтому внесите следующие изменения. 1. Замените #table_11_wrapper на #table_1_wrapper в JS-коде (также выделено на скриншоте). ibb.co/LgDHd54

Narendra Sishodiya 03.07.2024 06:57

Сначала я думал, что идентификатор относится к идентификатору таблицы в wpdatatables, поэтому обновил его до 11. Однако, несмотря на это изменение, функция экспорта по-прежнему не блокируется после достижения предела. Не могли бы вы взглянуть на это? Я очень ценю вашу помощь, Нарендра! :)

Mia 03.07.2024 08:40

Он отображается на вкладке «Сеть». Найдите скриншот. ibb.co/P1fHB5Z

Narendra Sishodiya 03.07.2024 08:47

Спасибо за помощь! Я проверил вкладку «Сеть» и вижу, что выполняется запрос AJAX, как показано на вашем снимке экрана, что подтверждает, что отслеживание работает. Однако я заметил, что пользователи по-прежнему могут экспортировать данные даже после превышения установленного мной лимита. Как мы можем предотвратить дальнейший экспорт, когда пользователь достиг максимального предела? Есть ли дополнительный шаг, который нам нужно предпринять, чтобы обеспечить соблюдение этого ограничения во внешнем или внутреннем интерфейсе? Спасибо:)

Mia 03.07.2024 16:03

Я обновил код на шаге 1, пожалуйста, обновите его со своей стороны, он должен работать.

Narendra Sishodiya 03.07.2024 16:26

Я не могу отблагодарить тебя за помощь, Нарендра. Сейчас он работает в Microsoft Edge, но у меня возникли проблемы с Google Chrome. Я займусь устранением неполадок, чтобы посмотреть, смогу ли я их решить. Я напишу тебе через некоторое время, смогу ли я это сделать :)

Mia 03.07.2024 18:23

Нарендра, я пытался разобраться, но не смог найти, в чем проблема из-за моих навыков программирования: D Он отлично работает в Microsoft Edge, но в Google Chrome показывает проблему на моей стороне ( Неперехваченная синтаксическая ошибка: неожиданный конец ввода — hello-frontend.min.js:92). Не могли бы вы взглянуть на это, Нарендра?

Mia 03.07.2024 19:57

На моей стороне он работает нормально и в Google Chrome, пожалуйста, найдите прикрепленную ссылку на видео. streamable.com/0nh9x7

Narendra Sishodiya 04.07.2024 06:34

О, я вижу, это довольно интересно. Я протестировал его на нескольких устройствах, включая Safari на iPhone, и он работает только в Microsoft Edge. Мой последний вопрос: можно ли интегрировать подсчет с ежемесячным сбросом в виджете Elementor или в какой-то части информационной панели? Таким образом, пользователи смогут легко увидеть, приблизились ли они к своему пределу, и это может помочь нам определить, связана ли проблема с подсчетом или сокрытием кнопки экспорта. Еще раз спасибо, я не знаю, что бы я делал без твоей помощи, Нарендра.

Mia 04.07.2024 10:20

Пожалуйста, добавьте данный код в файл functions.php, чтобы отобразить export count в виджете Dashboard. add_action( 'wp_dashboard_setup', 'dashboard_widgets_for_export_count' ); function dashboard_widgets_for_export_count() { wp_add_dashboard_widget( 'export_count_widget_user_dashboard', 'Export Count', 'dashboard_export_count_widget' ); } function dashboard_export_count_widget() { $user_id = get_current_user_id(); $export_count = get_user_meta($user_id, 'export_count', true); echo '<p>Your export count is : ' . intval( $export_count ) . '</p>'; }

Narendra Sishodiya 04.07.2024 11:10

Вау, теперь он работает отлично. Как ты всему этому научился? Даже служба поддержки WPDataTables заявила, что это невозможно из-за ограничений плагина, и вы только что это сделали. Большое спасибо. Могу ли я сделать одолжение и тебе? Это многое значит для меня!

Mia 04.07.2024 16:46

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

Narendra Sishodiya 04.07.2024 16:59

Также вы можете пометить этот вопрос как решенный, если ваши вопросы решены.

Narendra Sishodiya 04.07.2024 17:42

Хорошо, я сделаю это. Спасибо!... кстати, я написала тебе в инстаграме;)

Mia 04.07.2024 19:02

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