/ Плагины / Несколько менеджеров магазина

Несколько менеджеров магазина

HIT

15.01.2019

1838

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

Специальное поле — менеджер

Заведем в профиле клиента (user profile) дополнительное поле (менеджер), которое будет заполняться только в бэкенде.

add_action( 'show_user_profile', 'extra_user_profile_fields' );
add_action( 'edit_user_profile', 'extra_user_profile_fields' );
function extra_user_profile_fields( $user ) { ?>
    <h3>Клиент прикреплен за менеджером</h3>

    <table class="form-table">
    <tr>
        <th><label for="permanager">Менеджер</label></th>
        <td>
            <input type="text" name="permanager" id="permanager" value="<?php echo esc_attr( get_the_author_meta( 'permanager', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Укажите менеджера за которым прикреплен этот клиент"); ?></span>
        </td>
    </tr>
    </table>
<?php }


add_action( 'personal_options_update', 'save_extra_user_profile_fields' );
add_action( 'edit_user_profile_update', 'save_extra_user_profile_fields' );
function save_extra_user_profile_fields( $user_id ) {
    if ( !current_user_can( 'edit_user', $user_id ) ) { 
        return false; 
    }
    update_user_meta( $user_id, 'permanager', $_POST['permanager'] );
}

Либо сделаем поле выбора менеджера списком

add_action( 'show_user_profile', 'extra_user_profile_fields' );
add_action( 'edit_user_profile', 'extra_user_profile_fields' );
function extra_user_profile_fields( $user ) { ?>
    <h3>Клиент прикреплен за менеджером</h3>

    <table class="form-table">
    <tr>
        <th><label for="permanager">Менеджер</label></th>
        <td>
            <?php $permanager = get_the_author_meta( 'permanager', $user->ID ); ?>
			<select name="permanager" class="regular-text" id="permanager">
			<option value="maksim" <?php if ( $permanager == 'maksim' ) { echo 'selected="selected"'; } ?>>Максим</option>
			<option value="petr" <?php if ( $permanager == 'petr' ) { echo 'selected="selected"'; } ?>>Петр</option>
			<option value="elena" <?php if ( $permanager == 'elena' ) { echo 'selected="selected"'; } ?>>Елена</option>
			</select>
			<br />
            <span class="description"><?php _e("Укажите менеджера за которым прикреплен этот клиент"); ?></span>
        </td>
    </tr>
    </table>
<?php }

Поле при создании пользователя

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

function custom_user_profile_fields($user){
  ?>
    <table class="form-table">
        <tr>
            <th><label for="permanager">Менеджер</label></th>
            <td>
		<select name="permanager" class="regular-text" id="permanager">
		<option value=""> </option>
		<option value="elena">Елена</option>
		<option value="maksim">Максим</option>
		<option value="petr">Пётр</option>
		</select>
            </td>
        </tr>
    </table>
  <?php
}
add_action( 'user_new_form', 'custom_user_profile_fields' );

function save_custom_user_profile_fields($user_id){
    if(!current_user_can('manage_options'))
        return false;

    if (!empty( $_POST['permanager'] )) { update_user_meta($user_id, 'permanager', $_POST['permanager']); }
}
add_action('user_register', 'save_custom_user_profile_fields');
add_action('profile_update', 'save_custom_user_profile_fields');

Отправка писем менеджерам

Далее создаем проверку при отправке

// Определение почты администратора в зависимости от поля менеджер
add_filter( 'woocommerce_email_recipient_new_order', 'conditional_email_recipient', 10, 2 );
function conditional_email_recipient( $recipient, $order ) {
    if( is_admin() ) return $recipient;
	
	$user_id = $order->get_user_id(); 
	$permanager = get_the_author_meta( 'permanager', $user_id );	

    if ( $permanager == 'petr' ) { $recipient = 'mail-1@mail.ru'; }
	elseif ( $permanager == 'maksim' ) { $recipient = 'mail-2@gmail.com'; }
	else {$recipient = 'mail-3@yandex.ru';}

    return $recipient;
}

Если отключить предпоследнюю строку else {$recipient = ‘mail-3@yandex.ru’;}, то почта будет взята из настроек woocommerce.

Выведем произвольное поле в таблице Пользователи

// Выведем Бренд в таблице Пользователи

function new_modify_user_table( $column ) {
    $column['brand_manager'] = 'Бренд';
    return $column;
}
add_filter( 'manage_users_columns', 'new_modify_user_table' );

function new_modify_user_table_row( $val, $column_name, $user_id ) {
    switch ($column_name) {
        case 'brand_manager' :
            return get_the_author_meta( 'brand_manager', $user_id );
        default:
    }
    return $val;
}
add_filter( 'manage_users_custom_column', 'new_modify_user_table_row', 10, 3 );

Добавить 2 колонки сразу:

function new_modify_user_table( $column ) {
    $column['phone'] = 'Phone';
    $column['xyz'] = 'XYZ';
    return $column;
}
add_filter( 'manage_users_columns', 'new_modify_user_table' );

function new_modify_user_table_row( $val, $column_name, $user_id ) {
    switch ($column_name) {
        case 'phone' :
            return get_the_author_meta( 'phone', $user_id );
        case 'xyz' :
            return '';
        default:
    }
    return $val;
}
add_filter( 'manage_users_custom_column', 'new_modify_user_table_row', 10, 3 );
Фильтр и сортировка по произвольному полю пользователя.

Скрыть стандартные колонки в таблице Пользователи

add_action('manage_users_columns','kjl_modify_user_columns');
function kjl_modify_user_columns($column_headers) {
	unset($column_headers['posts']);
	unset($column_headers['role']);
	return $column_headers;
}
[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Выравнивание миниатюр товаров

Выравнивание миниатюр товаров

Идеальная ситуация, когда мы загружаем изображения для товаров (хотя бы для главного изображения) квадратными. т.е. заранее подготовленными, откадрированными. Но бывают случаи, когда на сайт начинают заливаться изображения разных пропорций. Сделаем Читать далее »

/
Связывание товаров

Связывание товаров

Если товары продаются несколькими частями, но части нужно связать чтобы одну без другой нельзя было приобрести, можно связать такие товары. Как вариант такие товары можно заводить как один товар (в Читать далее »

Фильтр по наличию

Фильтр по наличию

Оказывается в последних версиях Woocommerce есть встроенная функция фильтрации по наличию. Через добавление в url параметра filter_stock_status. Можно её использовать для создания фильтра: Функция вывода списка: Функция с условиями вывода Читать далее »

Добавить комментарий

Пока нет комментариев. Будь первым!

Несколько менеджеров магазина
Яндекс Маркет
Рекомендации для васЯндекс МаркетOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.