Андрей, добрый вечер
Спасибо за отличный плагин!
Использую Profile Types Manager, при регистрации за пользователем неизменно закрепляется определенный тип профиля с определённым выводом вкладок, полей. Подскажите пожалуйста как отойти от деления пользователей сайта на заказчиков и исполнителей, а прописать для определенного существующего типа профиля, нужные вкладки?
Вы ранее упомянули, что теоретически, эти вкладки можно вообще отменить без вмешательства в код дополнения и добавить уже для всех, а затем распределить их отображение через Profile Types Manager.
Это, именно то, что нужно, тоесть, как я понял, через functions.php... У меня есть тип профиля для доверенных лиц (не доступный при регистрации) на него я хотел бы повесить вкладку исполнителей с возможностью публикации их услуг. А для всех остальных добавить вкладку в ЛК о заказе из списка услуг.
Добрый день.
Давайте пробовать реализовать вашу задачу.
Отключим стандартную регистрацию вкладок и зарегистрируем их без оглядки на текущий тип пользователя пользователя:
//отменяем стандартную регистрацию вкладок дополнения remove_action( 'init', 'sm_add_tab', 20 ); //регистрируем вкладки для дополнения без привязки к типу профиля add_action( 'init', 'sm_custom_add_tab', 20 ); function sm_custom_add_tab() { rcl_tab( array( 'id' => 'sm-services', //'supports' => array('ajax'), 'name' => __( 'Услуги' ), 'public' => 1, 'icon' => 'fa-wrench', 'output' => 'menu', 'content' => array( array( 'id' => 'sm-services', 'name' => __( 'Все услуги' ), 'icon' => 'fa-wrench', 'callback' => array( 'name' => 'sm_service_tab' ) ), array( 'id' => 'sm-service-add', 'name' => __( 'Добавить услугу' ), 'icon' => 'fa-plus-square-o', 'callback' => array( 'name' => 'sm_add_service_tab' ) ) ) ) ); rcl_tab( array( 'id' => 'sm-orders', 'supports' => array( 'ajax' ), 'name' => __( 'Заказы услуг' ), 'public' => 0, 'icon' => 'fa-handshake-o', 'output' => 'menu', 'content' => array( array( 'id' => 'sm-service-orders', 'name' => __( 'Заказы услуг' ), 'icon' => 'fa-handshake-o', 'callback' => array( 'name' => 'sm_service_order_tab' ) ) ) ) ); rcl_tab( array( 'id' => 'master-reviews', 'supports' => array( 'ajax' ), 'name' => __( 'Отзывы' ), 'public' => 1, 'icon' => 'fa-handshake-o', 'output' => 'menu', 'content' => array( array( 'callback' => array( 'name' => 'sm_get_reviews_list' ) ) ) ) ); }
После этого все вкладки станут доступны пользователям и вы сможете назначать доступ к вкладкам для ваших типов пользователей, созданных с помощью дополнения Profile Types Manager.
К сожалению, пока не работает.
Если с конца, то при добавлении произвольной вкладки в менеджере вкладок, код из functions слетает...
Я проверял, поменяв названия вкладок в коде выше, поначалу все отображалось потом после добавления, вкладки стали называться по стандарту, то есть, наверное, оно игнорирует код выше...
Перед этим, я пробовал работоспособность, но все упиралось все равно в тип Заказчика или Исполнителя, к примеру, добавил услугу как исполнитель - с другого акка заказал - но с акка исполнителя не вижу заказа. Пробовал по разному, заказ появляется, только если я добавлю нужные поля и выберу в профилях кто есть кто...
ПС. Плагины и допы пробовал отключить, тему тоже дефолт ставил, но результата не дало.
По новой откатил, но все то же, для понимания ситуации:
- поставил доп (поля sm добавлял, и не добавлял)
- добавил код в functions.php
- в Profile Types Manager распределил вкладки (если добавлял поля sm, их тоже отмечал, пробовал по разному)
- как исполнитель, добавил услугу
- как заказчик, заказал услугу, но услуга не появилась в "Заказах услуг" у исполнителя и заказчика (если все же по дефолту, активировать поля и в настройках ЛК выбрать правильные типы, - все норм отображает).
- для интереса попробовал переименовать названия вкладок 'name' => __( '...' ), - переименовались только: вкладка Услуги и две ее подвкладки, остальные остались по дефолту, как прописано в допе.
- добавил в менеджере вкладок пустую вкладку - вкладка услуги переименовалась обратно (не так,как в functions). То есть, переименованные, как в functions, остались только две подвкладки.
Как то так... 💤
Давайте разбивать реализацию на этапы.
1. Подмена и распределение вкладок
С работой предложенного кода я проблемы не заметил, вкладки становятся доступны всем и их можно распределить через PTM между типами пользователей.
2. Публикация услуги
Получилось опубликовать услугу и сделать заказ не на нее,
3. Отображение заказов в ЛК
но заказы, как и вы и сообщили не появились в соответствующей вкладке
Чтобы решить эту проблему необходимо открыть файл /wp-content/wp-recall/add-on/shop-service/functions-profile.php со строки 244 начнется содержимое функции sm_service_order_tab(), внутри ее замените 'sm-account' на метакей того поля, которое у вас является типом аккаунта и замените 'Заказчик' и "Исполнитель" на нужные вам значения
Если все ок, то идем дальше.
Спасибо большое, стараюсь детально описывать ситуацию, что бы не тратить лишнего времени на недопонимания ✌
1. Да, код главную задачу по вкладкам выполнил, только замечу, что вне зависимости от указания названия вкладки в functions.php, некоторые вкладки держут старые названия, а после добавления новой произвольной вкладки через менеджер, обратно подтягиваются уже и все названия вкладок (не подвкладок) из менеджера вкладок... Это не проблема, только, чтоб не вылезло оно где-то боком, ну и разве только ради чистоты кода в functions.php, если туда придется смотреть позже...
2. Получилось
3. Ok
а. Переспрошу, sm-account встречается еще много где, менять нужно только в диапазоне строк 244-307 функции sm_service_order_tab()?
b. По замене "Заказчик" и "Исполнитель", у меня подразумевается для Исполнителя один тип профиля, в то время как заказчиком может быть несколько типов профиля, вкладка для которых открыта через Profile Types Manager, тоесть типы профилей Заказчика в коде указывать через запятую, или?
Замечу, что после замены в коде только одного типа профиля с "Исполнитель" на свой (не меняя тип профиля "Заказчик"), вроде, все сработало корректно, но доп мне не знаком пока, и я переживаю, что бы эти упущения не вылезли где-то, при том, что вы сказали поменять и "Заказчика"...
Denver сказал(а)
вне зависимости от указания названия вкладки в functions.php, некоторые вкладки держут старые названия
Ну у вас названия подтягиваются из БД, если там уже были старые названия для этих вкладок, значит они будут приоритетными, а не те, что прописаны в коде.
Denver сказал(а)
типы профилей Заказчика в коде указывать через запятую, или?
Для одного или нескольких вариантов можно условия писать так:
if(in_array($typeName, array('Заказчик')))
или
if(in_array($typeName, array('Заказчик','НеЗаказчик')))
во втором случае условие сработает и для пользователя с типом профиля "Заказчик" и для пользователя "НеЗаказчик"
Denver сказал(а)
переживаю, что бы эти упущения не вылезли где-то
там вроде больше каких то серьезных мест быть не должно, но если что то вылезет, то поправим
Андрей, как идея...
Как я писал выше, мне нужно отойти от деления пользователей сайта на заказчиков и исполнителей, а прописать для определенного существующего типа профиля, нужные вкладки, а тоесть, нужный функционал,
отсюда вопрос -
- можно ли ВСЕХ пользователей (по возможности, включая существующих) ПО УМОЛЧАНИЮ сделать Заказчиками (к примеру, через functions.php)?
- далее скрываем через Profile Types Manager поля (SM:Тип аккаунта, SM:Контактные данные) для всех типов пользователей, кроме тех, кто подразумевается Исполнителем
- определяем нужные вкладки - Заказы услуг/Отзывы для "Заказчиков" - Услуги/Заказы услуг/Отзывы для "Исполнителей"
- теперь, либо через админку сам админ, либо уже через ЛК доверенные пользователи с определенным типом профиля смогут выставить себя "Исполнителями"...
... в моем случае, я закрою поля всем типам, и сам через админку смогу решать кому дать право публикации услуг.
Мне кажется, это в принципе смогло бы стать решением большинства подобных задач, без той мороки со вкладками и костылями, все остается как из коробки, кроме лишь возможности установки типа "Заказчик" по дефолту... Я пробовал в настройках поля ставить "Заказчик" как первое значение, но это, скорее всего, не то...
Извините, что сразу не допер, я мало знаком с допом и подошел с обратной сторны, можно Вас пожалуйста попросить помочь с этим?
ПС. Я выше немного не верно выразился, а точнее это из-за внесенных изменений я сбился, там в профиле Исполнителя, во вкладке Заказы услуг, во второй колонке таблицы пишет "Исполнитель" вместо "Заказчик"
Denver сказал(а)
ПС. Я выше немного не верно выразился, а точнее это из-за внесенных изменений я сбился, там в профиле Исполнителя, во вкладке Заказы услуг, во второй колонке таблицы пишет "Исполнитель" вместо "Заказчик"
Если я правильно все подправил - дело в строке 8 в файле sm-service-order-card.php
Было
<td><?php echo ($master_account == 'Заказчик')? __('Исполнитель'): __('Исполнитель'); ?></td>
вроде, так показывает верно
<td><?php echo ($master_account == 'Заказчик')? __('Исполнитель'): __('Заказчик'); ?></td>