Как создать панель в админке WooCommerce для отображения купленных услуг с фильтром по клиенту

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

Одной из полезных функций, предоставляемых панелью администратора WooCommerce, является возможность отображения купленных услуг с фильтром по клиентам. Это позволяет администратору увидеть все заказы, оформленные определенным клиентом, и быстро анализировать его покупательскую активность.

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

Как отобразить купленные услуги в Панели администратора WooCommerce с фильтром по клиентам

1. Добавьте следующий код в файл functions.php вашей темы или в плагин для настройки WooCommerce:


add_action('admin_menu', 'add_custom_menu_page');
function add_custom_menu_page(){
add_menu_page( 'Купленные услуги', 'Купленные услуги', 'manage_options', 'custom-plugin', 'custom_menu_page', 'dashicons-cart', 60 );
}
function custom_menu_page(){
global $wpdb;
$customers = $wpdb->get_results("SELECT DISTINCT post_author FROM {$wpdb->prefix}posts WHERE post_type = 'shop_order' ORDER BY post_author");
echo '<div class="wrap">';
echo '<h1>Купленные услуги</h1>';
echo '<select id="customer-select">';
echo '<option value="0">Все клиенты</option>';
foreach ($customers as $customer) {
$user_info = get_userdata($customer->post_author);
$customer_name = $user_info->first_name . ' ' . $user_info->last_name;
echo '<option value="' . $customer->post_author . '">' . $customer_name . '</option>';
}
echo '</select>';
echo '<table class="wp-list-table widefat fixed striped">';
echo '<thead>';
echo '<tr>';
echo '<th>Заказ</th>';
echo '<th>Клиент</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody id="order-table">';
echo '</tbody>';
echo '</table>';
echo '</div>';
}

2. Добавьте следующий код в ваш файл JavaScript (например, в файл scripts.js вашей темы):


(function($){
$(document).ready(function(){
$('#customer-select').change(function(){
var customer_id = $(this).val();
$.ajax({
url: ajaxurl,
type: 'post',
dataType: 'json',
data: {
action: 'get_customer_orders',
customer_id: customer_id
},
success: function(response){
$('#order-table').html(response.table_html);
}
});
});
});
})(jQuery);

3. Добавьте следующий код в файл functions.php вашей темы или в плагин для настройки WooCommerce:


add_action('wp_ajax_get_customer_orders', 'get_customer_orders');
add_action('wp_ajax_nopriv_get_customer_orders', 'get_customer_orders');
function get_customer_orders(){
if(isset($_POST['customer_id'])){
$customer_id = sanitize_text_field($_POST['customer_id']);
global $wpdb;
$customer_orders = $wpdb->get_results($wpdb->prepare("
SELECT *
FROM {$wpdb->prefix}posts
WHERE post_type = 'shop_order'
AND post_status IN ('wc-completed', 'wc-processing')
AND post_author = %d
ORDER BY post_date DESC
", $customer_id));
$table_html = '';
foreach($customer_orders as $order){
$table_html .= '<tr>';
$table_html .= '<td><a href="' . get_permalink($order->ID) . '">' . $order->ID . '</a></td>';
$table_html .= '<td>' . get_the_author_meta('first_name', $order->post_author) . ' ' . get_the_author_meta('last_name', $order->post_author) . '</td>';
$table_html .= '</tr>';
}
echo json_encode(array('table_html' => $table_html));
}
wp_die();
}

После этого вы сможете увидеть новое меню «Купленные услуги» в Панели администратора WooCommerce. Выбрав клиента в выпадающем списке, таблица будет обновляться и отображать только купленные им услуги.

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