Как включить выбор клиентов на странице оформления заказа в WooCommerce?

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

Ключевые требования:

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

Мои попытки:

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

*Как я могу реализовать эту функцию выбора клиентов во внешнем интерфейсе? Существуют ли конкретные плагины или примеры пользовательского кода, которые могут помочь в этом?

🤔 А знаете ли вы, что...
PHP - это акроним рекурсивного сокращения, означающего 'PHP: Hypertext Preprocessor'.


50
1

Ответ:

Решено

1. Добавьте раскрывающийся список клиентов на страницу оформления заказа.

// Admin Customer Selection WooCommerce
function add_customer_selection_field_for_admin()
{
    if (current_user_can('administrator')) {
        $customers = get_users(array('role__in' => array('customer', 'subscriber')));
        echo '<p class = "form-row form-row-wide">';
        echo '<label for = "customer_selection">' . __('Select Customer') . '</label>';
        echo '<select required name = "customer_selection" id = "customer_selection">';
        echo '<option value = "">' . __('Select a customer') . '</option>';

        foreach ($customers as $customer) {
            echo '<option value = "' . esc_attr($customer->ID) . '">' . esc_html($customer->display_name . ' (' . $customer->user_email . ')') . '</option>';
        }
        echo '</select>';
        echo '</p>';
    }
}
add_action('woocommerce_before_order_notes', 'add_customer_selection_field_for_admin');

2. Установите для выбранного клиента при оформлении заказа конкретный заказ.

function assign_order_to_selected_customer($order_id)
{
    if (current_user_can('administrator') && isset($_POST['customer_selection']) && !empty($_POST['customer_selection'])) {
        $customer_id = absint($_POST['customer_selection']);

        if ($customer_id) {
            update_post_meta($order_id, '_customer_user', $customer_id);
        }
    }
}
add_action('woocommerce_checkout_update_order_meta', 'assign_order_to_selected_customer');