Предположим что мы делаем интернет-магазин оптовой компании нацеленной работу с уже имеющимися клиентами. Есть ряд менеджером к котором прикреплены те или иные клиенты. Как сделать так, чтобы заказы распределялись между менеджерами?
Специальное поле — менеджер
Заведем в профиле клиента (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]