как переключаться между двумя формами для посетителя веб-сайта после входа администратора в wordpress

Я столкнулся с проблемой: у меня сейчас две формы form1 и form2. Чего я хочу добиться, так это того, что когда администратор вошел в систему в любом месте, все посетители (не вошедшие в систему) на моем сайте WordPress должны видеть форму 1 на странице.

Иначе они должны увидеть form2? Что я сделал ниже:

if(current_user_can('author' )|| current_user_can('administrator')) 
    {    
          show form1    
       }
else {   
           show form2
    }

Теперь это работает нормально, но только для экрана администратора, а не для другого пользователя или посетителя. Я хочу, чтобы это было универсально.

Заранее спасибо. Я использую этот код в пользовательском шаблоне страницы. Пожалуйста, помогите мне, ребята. Любой учебник также поможет мне, или если есть какой-либо другой способ добиться этого. Пожалуйста, предложите мне.


person Anup    schedule 10.10.2015    source источник


Ответы (1)


Для этого вам нужно где-то зарегистрировать администраторов, которые входят или выходят из системы. Для этого я бы использовал переходный процесс, чтобы следить за тем, кто входит в систему, и регистрировать его, если это администратор (кто-то, способный управлять настройками).

Следующее не проверено, но должно работать. Вставьте все это в functions.php или создайте из него плагин:

//This function checks anyone logging in, and adds it to the database if its an admin.

add_action('wp', 'update_online_users_status'); //Registeres the function

function update_online_users_status(){
    $lastActive = 5 * 60; //An admin vas last active 5 mins ago (5 x 60 secs)

    if(is_user_logged_in()){
            // get the online users list, if theres anyone already logged in
                if(($logged_in_users = get_transient('admins_online')) === false)    $logged_in_users = array();
                $current_user = wp_get_current_user();
                    $current_user = $current_user->ID;  
                    $current_time = current_time('timestamp');

                    if (current_user_can( 'manage_options' )) { //Checks if its an admin logging in
                            if(!isset($logged_in_users || ($logged_in_users < ($current_time - ($lastActive)))){
                                $logged_in_users = $current_time;
                                set_transient(‘admins_online', $logged_in_users, $lastActive);
                            }
                    }
            }
    }
}

//The actual check. Returns true/false based on if theres been an active admin for the past x minutes
function is_there_an_admin_online() {

  // get the online users list
  $logged_in_users = get_transient('admins_online');

  return isset($logged_in_users && ($logged_in_users > (current_time('timestamp') - (5 * 60)));
}

Установите любой тайм-аут, который вы хотите, заменив 5 * 60 - один раз в каждой из вышеперечисленных функций.

Затем вы сможете сделать проверку следующим образом:

$isAdminOnline = is_there_an_admin_online();
if( $isAdminOnline == true ) 
    {    
          show form1    
       }
else {   
           show form2
    }
person danjah    schedule 10.10.2015