Как сделать так, чтобы вкладки моих плагинов правильно отображались в WordPress / woocommerce с помощью current_user_can()

#php #wordpress

#php #wordpress

Вопрос:

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

 class my_plugin_admin{

    public $plugin_tabs = array();
    
    public function __construct() {
        add_action('admin_init', array( $this, 'show_different_tabs' ));
    }

    public function show_different_tabs(){
     if(current_user_can('administrator')){
        $this->plugin_tabs = array(
        'tabname1'=> __('Tabname1' , 'woocommerce-myplugin'),
        'tabname2'=> __('Tabname2' , 'woocommerce-myplugin'),
        'tabname3'=> __('Tabname3' , 'woocommerce-myplugin'),
        'tabname4'=> __('Tabname4' , 'woocommerce-myplugin')
        );
     }elseif(current_user_can('manage_woocommerce')){
       $this->plugin_tabs = array(
        'tabname1'=> __('Tabname1' , 'woocommerce-myplugin'),
        'tabname2'=> __('Tabname2' , 'woocommerce-myplugin')
         );
   }else{
       $this->plugin_tabs = array(
        'tabname1'=> __('Tabname1' , 'woocommerce-myplugin'),
        'tabname2'=> __('Tabname2' , 'woocommerce-myplugin')
         );
   }
}
} 
 

Для этого плагина есть интерфейс и серверная часть. Есть вкладки, которые взаимодействуют с БД, один экспортирует файл в .csv (этот загружается бесконечно), один показывает журналы (также загружается бесконечно), один загружает заказы и т. Д. (это не загрузка заказов, но отображается страница, т.е. Кнопки, Входные данные и т. Д). Также во внешнем интерфейсе есть foreach, который перебирает три вкладки следующим образом…
<?php foreach ($plugin_tabs as $plugin_tab => $plugin_tab_translated) {?> <a class="nav-tab <?php echo $active_tab == $$plugin_tab ? 'nav-tab-active' : '' ?>" href="<?php echo admin_url( 'admin.php?page=' . $menu_slug . 'amp;tab=' . $plugin_tab ) ?>"><?php echo $plugin_tab _translated ?></a> <?php } ?>

Комментарии:

1. Во-первых … administrator это роль, а не возможность. Проверьте это wordpress.stackexchange.com/a/131816/57589 — помимо этого, как бы кто-нибудь попытался повторить ваш пример кода? Где применяются эти вкладки? На пользовательской странице администратора?

2. Я пробовал использовать как «администратор», так и различные возможности, включая «manage_options», и результаты были одинаковыми. Это плагин для woocommerce, и вкладки отображаются на стороне администратора при нажатии на плагин. Так что да, пользовательская страница администратора.

3. Здесь просто недостаточно кода, чтобы действительно понять, что вы пытаетесь сделать. Не могли бы вы обновить свой вопрос, чтобы включить больше справочной информации и как вы создаете эти страницы?

4. Я обновил вопрос. Кроме того, на серверной части чуть ниже функции ‘show_different_tabs’ есть функция с оператором switch, которая включает файлы для всех этих вкладок. Пример; case: ‘tab1’ (включить файл для tab1) и т. д.

5. Говард, я решил это, написав if / else внутри конструктора. Я пробовал это и потерпел неудачу, прежде чем реализовать описанный выше способ. Я узнал, что pluggable.php по какой-то причине не был загружен, поэтому пришлось подключить его через include, а затем смог выполнить проверки с помощью current_user_can.