Поддержка Плагины Смена ролей по клику кнопки

  • Здравствуйте дорогие друзья! Очень нужна помощь знающего человека.
    Дело в том, что встала задача в плагине, для создания шоткодов с копкой для смена ролей.

    С плагинами дел раньше не имел, от слова «совсем», прошу сильно не пинать.

    Для работы с ролями использую Ultimate Member и Multiple Roles. Если делать «криво» — через Insert PHP Code Snippet (XYZ PHP Code) выглядит вот так:

    
    //создаем форму с кнопкой
    <form method="post">
        <input type="submit" name="change_role" id="change_role" value="Поменять роль" /><br/>
    </form>
    
    <?php
    //функция для манипуляций с ролями
    function add_role_usr() {
    
    $cur_user_id = get_current_user_id(); //получили id текущего юзера
    $user = new WP_User( $cur_user_id );
    
    $user->add_role( 'role2'); //присваиваем юзеру роль2
    $user->remove_role('role1'); //убираем у юзера роль1
    }
    
    if(array_key_exists('change_role',$_POST)){
       add_role_usr(); //выполняем функцию
    header("Refresh: 0"); //на всякий случай обновляем страницу принудительно
    }
    ?>
    

    Пожалуйста, прошу помощи разобраться, как сделать из этого плагин, чтобы можно было задавать параметры типа

    [change_roles add_role=»role2″ remove_role=»role1″]

    Заранее — огромное спасибо всем откликнувшимся!

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Модератор Юрий

    (@yube)

    как сделать из этого плагин

    В общем просто.

    <?php 
    /*
    Plugin Name: Role changer
    */
    add_shortcode('change_roles', function($atts) {
      $role1 = $atts['remove_role'];
      $role2 = $atts['add_role'];
      if( isset($_POST['change_role'])){
         //выполняем функцию
      }
      $html = <<<FORM
    
    <form method="post">
        <input type="submit" name="change_role" id="change_role" value="Поменять роль" /><br/>
    </form>
    
    FORM;
      return $html;
    });
    

    О header() в обработчике шорткода придется забыть, потому что на момент работы обработчика уже поздно для заголовоков.

    чтобы можно было задавать параметры типа
    [change_roles add_role=»role2″ remove_role=»role1″]

    Вы хотите эти role1 и role2 передавать через html-форму? Не боитесь, что кто-нибудь ушлый подменит role2 на administrator?

    Вы хотите эти role1 и role2 передавать через html-форму? Не боитесь, что кто-нибудь ушлый подменит role2 на administrator?

    Они будут предопределены на странице сразу, при заполнении контентом. Получается, есть возможность модифицировать запрос?

    В любом случае для подстраховки — в настройках Ultimate Member есть список «закрытых» ролей.

    Юрий, огромное Вам спасибо! Теплого солнца, любви, здоровья! 🙂

    Модератор Юрий

    (@yube)

    Получается, есть возможность модифицировать запрос?

    Параметры, передаваемые формой, заменить прямо на странице проще простого. Да и сфальсифицировать запрос якобы от формы довольно легко. Собственно из-за этого и применяют «одноразовые числа» (nonce) и прочие ухищрения.

    От формы на странице будет только кнопка. Названия ролей будут прописаны в самом шоткоде. Но, понял, почитаю в сторону защиты запроса.
    Ещё раз — большое спасибо!

Просмотр 4 ответов — с 1 по 4 (всего 4)