В настоящее время я оцениваю плагин WPDataTables для проекта WordPress. В частности, мне нужно отслеживать, сколько раз каждый пользователь экспортирует данные из таблицы. Эта функция имеет решающее значение для нашего проекта, поскольку нам необходимо ограничить объем данных, которые наши подписчики могут экспортировать, чтобы предотвратить очистку базы данных.
Предлагает ли плагин WPDataTables встроенную функцию подсчета действий экспорта для каждого пользователя? Если нет, существует ли рекомендуемый подход или обходной путь для реализации этой функции?
Спасибо за помощь!:)
——
Я просмотрел документацию WPDataTables и изучил настройки плагина, но не смог найти возможности подсчитывать действия экспорта для каждого пользователя. Я ожидал найти встроенную функцию или настройку для отслеживания активности экспорта конкретных пользователей.
Мы можем использовать обходной подход для достижения необходимой функциональности. В этом подходе мы будем использовать мета-данные пользователя 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);
Пожалуйста, дайте мне знать, если это поможет.
Не могли бы вы поделиться URL-адресом веб-сайта, чтобы я мог рассмотреть его поближе?
Конечно! (gomarketish.com ). Вы можете просто зарегистрироваться, а затем увидеть таблицу данных.
Я внедрил новый код из первого шага, который вы предоставили, в gomarketish.com/wp-content/themes/hello-elementor/assets/js/… для панели мониторинга пробной версии. К сожалению, опция экспорта по-прежнему не блокируется после 10 операций экспорта...
Код не работает, потому что он неправильный id
, поэтому внесите следующие изменения. 1. Замените #table_11_wrapper
на #table_1_wrapper
в JS-коде (также выделено на скриншоте). ibb.co/LgDHd54
Сначала я думал, что идентификатор относится к идентификатору таблицы в wpdatatables, поэтому обновил его до 11. Однако, несмотря на это изменение, функция экспорта по-прежнему не блокируется после достижения предела. Не могли бы вы взглянуть на это? Я очень ценю вашу помощь, Нарендра! :)
Он отображается на вкладке «Сеть». Найдите скриншот. ibb.co/P1fHB5Z
Спасибо за помощь! Я проверил вкладку «Сеть» и вижу, что выполняется запрос AJAX, как показано на вашем снимке экрана, что подтверждает, что отслеживание работает. Однако я заметил, что пользователи по-прежнему могут экспортировать данные даже после превышения установленного мной лимита. Как мы можем предотвратить дальнейший экспорт, когда пользователь достиг максимального предела? Есть ли дополнительный шаг, который нам нужно предпринять, чтобы обеспечить соблюдение этого ограничения во внешнем или внутреннем интерфейсе? Спасибо:)
Я обновил код на шаге 1, пожалуйста, обновите его со своей стороны, он должен работать.
Я не могу отблагодарить тебя за помощь, Нарендра. Сейчас он работает в Microsoft Edge, но у меня возникли проблемы с Google Chrome. Я займусь устранением неполадок, чтобы посмотреть, смогу ли я их решить. Я напишу тебе через некоторое время, смогу ли я это сделать :)
Нарендра, я пытался разобраться, но не смог найти, в чем проблема из-за моих навыков программирования: D Он отлично работает в Microsoft Edge, но в Google Chrome показывает проблему на моей стороне ( Неперехваченная синтаксическая ошибка: неожиданный конец ввода — hello-frontend.min.js:92). Не могли бы вы взглянуть на это, Нарендра?
На моей стороне он работает нормально и в Google Chrome, пожалуйста, найдите прикрепленную ссылку на видео. streamable.com/0nh9x7
О, я вижу, это довольно интересно. Я протестировал его на нескольких устройствах, включая Safari на iPhone, и он работает только в Microsoft Edge. Мой последний вопрос: можно ли интегрировать подсчет с ежемесячным сбросом в виджете Elementor или в какой-то части информационной панели? Таким образом, пользователи смогут легко увидеть, приблизились ли они к своему пределу, и это может помочь нам определить, связана ли проблема с подсчетом или сокрытием кнопки экспорта. Еще раз спасибо, я не знаю, что бы я делал без твоей помощи, Нарендра.
Пожалуйста, добавьте данный код в файл 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>'; }
Вау, теперь он работает отлично. Как ты всему этому научился? Даже служба поддержки WPDataTables заявила, что это невозможно из-за ограничений плагина, и вы только что это сделали. Большое спасибо. Могу ли я сделать одолжение и тебе? Это многое значит для меня!
Я известный разработчик WordPress. Если хотите, мы можем связаться через профили в социальных сетях, где мы сможем обсудить больше.
Также вы можете пометить этот вопрос как решенный, если ваши вопросы решены.
Хорошо, я сделаю это. Спасибо!... кстати, я написала тебе в инстаграме;)
К сожалению, у меня это не сработало. Я пробовал обновить сайт до и после экспорта, а также использовать разные таблицы, но экспорт не блокируется после достижения установленного мной предела. Чтобы предоставить более подробную информацию, я вставил код из первого шага в файл Hello-frontend.js (imgur.com/a/hsNYDLT ), а шаги 2 и 3 — в файл function.php ( imgur.com/a/akmj2vW). Спасибо, Нарендра :) Миа