Удалите кнопки действий из панели мониторинга подписок WooCommerce для определенной роли пользователя c - PullRequest
1 голос
/ 25 апреля 2020

Я ищу виртуального помощника, который поможет управлять билетами поддержки. Этот виртуальный помощник должен иметь доступ для чтения к ограниченным областям WooCommerce ( Подписки ).

Я использую ' редактор ролей пользователей ', чтобы удалить все возможности, которые не нужны. К сожалению, одна возможность ( edit_shop_orders ) дает доступ к функциям, к которым я не хочу, чтобы агент имел доступ. Я вынужден предоставить агенту эту возможность, чтобы иметь доступ к меню подписки на заднем конце.


Что я пытаюсь сделать:

Удалите кнопки «Приостановить» и «Отмена» из определенной роли пользователя ( va_support )

enter image description here



Мой текущий код (не работает):

function change_va_support_role(){
    global $wp_roles;
    $wp_roles->remove_cap( 'va_support', 'suspend_subscriptions' );
    $wp_roles->remove_cap( 'va_support', 'cancel_subscriptions' );

}
add_action('init', 'change_va_support_role');

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

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Используя Javascript / jQuery, ниже удаляются все «зависшие» кнопки действий для определенной роли пользователя c на панели администратора подписок из столбца состояния:

add_action( 'admin_footer', 'admin_dashboard_subscriptions_filter_callback' );
function admin_dashboard_subscriptions_filter_callback() {
    global $pagenow, $post_type;

    $targeted_user_role = 'va_support'; // <== Your defined user role slug

    // Targeting subscriptions admin dashboard for specific user role
    if( $pagenow === 'edit.php' && $post_type === 'shop_subscription' 
    && current_user_can( $targeted_user_role ) ) :
    ?>
    <script>
    jQuery(function($){
        $('td.column-status > div.row-actions').each(function() {
            $(this).remove();
        });
    });
    </script>
    <?php
    endif;
}

Код идет в функции. php файл вашей активной дочерней темы (или активной темы). Проверено и работает.

0 голосов
/ 25 апреля 2020

На данный момент нет фильтра для обработки этого триггера действия. Вы можете добавить фильтр самостоятельно для обработки этого.

/ woocommerce-subscription / includes / admin / class-wcs-admin-post-types. php внутри этой функции вокруг строки # 330 - public function parse_bulk_actions()

/*
 * Use below hook for handling custom user role permission for action from subscription listing page
 */
$can_change_status = apply_filters('wcs_can_change_subscription_status', true, $subscription_ids);
if(!$can_change_status){
    return;
}

В теме вы можете проверить, есть ли у текущего пользователя роль, и вернуть соответственно true / false. Возможно, вы знаете, что при обновлении плагина изменения будут потеряны. Но что касается проверки кода, то нет фильтра непосредственно перед запуском этих функций.

add_filter( 'wcs_can_change_subscription_status', 'alter_can_change_subscription_status' );

function alter_can_change_subscription_status( $can_change_status ) {

    $user = wp_get_current_user();
    if ( in_array( 'va_support', (array) $user->roles ) ) {
        //The user has the "va_support" role
        return false;
    }
    return  $can_change_status;
}
...