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

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

HIT

15.01.2019

1399

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

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

Заведем в профиле клиента (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;
}

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
Поле для вариативного товара

Поле для вариативного товара

Как делать произвольные (пользовательские) поля для товаров Woocommerce описано здесь. Но теперь пойдем дальше — сделаем поле для вариативного товара. Это должно открыть горизонты для интересных решений. Но я предвижу Читать далее »

Отключить кнопку Купить (чекбокс)

Отключить кнопку Купить (чекбокс)

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

Массовое изменение метаполей

Массовое изменение метаполей

Известная проблема/неудобство wordpress — обновление метаполей, т.е. чтобы обновить метаполе необходимо войти в запись и обновить ее. Массовое редактирование (например поменять статус записей или т.п.) в данном случае не помогает Читать далее »

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

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

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