PHP logi c "и" "&&" для ограничения сайта WordPress - PullRequest
0 голосов
/ 21 июня 2020

У меня две разные роли пользователя на моем веб-сайте: работодатель и кандидат. У каждого был свой профиль, но профиль кандидата должен видеть только работодателей и никого другого.

Итак, я хочу ограничение в Wordpress, например:

Работодатель МОЖЕТ видеть кандидата Кандидат НЕ МОЖЕТ видеть другой кандидат-кандидат МОЖЕТ видеть собственный профиль

Это контролируется плагином, но, похоже, он не работает ПОТОМУ ЧТО:

Работодатель МОЖЕТ видеть кандидата Кандидат МОЖЕТ видеть другого кандидата Кандидат МОЖЕТ 'Я вижу собственный профиль

В файле. php из профиля кандидата есть этот код:

<?php
    if (!$show_candidate_public_profile) {
        if ($candidate->get_public_account() || get_current_user_id() == $candidate->get_author_id()) {
            $check = 1;
        } else {
            $check = 2;
        }
    } else {
        if (is_user_logged_in()) {
            if ($show_candidate_public_profile == 2 && get_current_user_id() == $candidate->get_author_id()) {
                if ($user->is_employer() && $candidate->get_public_account()) {
                    $check = 3;
                } else {
                    $check = 4;
                }
            } else {
                if ($candidate->get_public_account() || get_current_user_id() == $candidate->get_author_id()) {
                    $check = 1;
                } else {
                    $check = 2;
                }
            }
        } else {
            $check = 0;
        }
    }

    

и код результатов сразу после кода сверху:

     if (!$check) {
        ?>
        <div class="iwj-alert-box">
            <div class="container">
                <span>
                    <?php echo sprintf(__('You must be logged in to view this page. <a href="%s">Login here</a>', 'iwjob'), add_query_arg('redirect_to', $candidate->permalink(), $login_page_id)); ?>
                </span>
            </div>
        </div>
    <?php
    } else {
        if ($check == 2) {
            ?>
            <div class="iwj-alert-box">
                <div class="container">
                    <span>
                        <?php echo esc_html__('This profile is not public now.', 'iwjob'); ?>
                    </span>
                </div>
            </div>
        <?php } elseif ($check == 4) {
            ?>
            <div class="iwj-alert-box">
                <div class="container">
                    <span>
                        <?php echo esc_html__('This profile is not public or only employers can see.', 'iwjob'); ?>
                    </span>
                </div>
            </div>
        <?php } else {
            ?>
            <div class="iw-parallax" data-iw-paraspeed="0.1" style="background-image: url('<?php echo esc_url($cover_image_url); ?>');"></div>
            <div class="iw-parallax-overlay"></div>
            <div class="content-top">
                <div class="container">
                    <div class="info-top">
                        <div class="candidate-logo">

Проверка 3 - единственная проверка, показывающая профиль.

Я попытался изменить «&&» «||» "==", но я не могу понять, как работает этот logi c.

Так много php для меня слишком много. Я спросил создателя плагина, но я всегда жду 5 дней, чтобы ответить, и он мне нужен сейчас.

Я был бы очень рад, если бы кто-нибудь помог мне с этим.

Большое спасибо !

Мартин

1 Ответ

1 голос
/ 21 июня 2020

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

Первая часть:

<?php
if(!is_user_logged_in())
    $check=false; //if user is not logged in check is false
else
{
    //check if user is employer or if is the profile owner
    if ($user->is_employer() || get_current_user_id() == $candidate->get_author_id())
        $check = 1; //sets 1 if allowed
    else
        $check = 2; //sets 2 if denied 
}
?>

Вторая часть:

if (!$check) //is check false? then show login message 
{
?>
    <div class="iwj-alert-box">
        <div class="container">
            <span>
                <?php echo sprintf(__('You must be logged in to view this page. <a href="%s">Login here</a>', 'iwjob'), add_query_arg('redirect_to', $candidate->permalink(), $login_page_id)); ?>
            </span>
        </div>
    </div>

<?php
} 
else //check it's not false, so do more tests
{
    if ($check == 2) //if equals 2 then shows access denied message 
    {
?>
        <div class="iwj-alert-box">
            <div class="container">
                <span>
                    <?php echo esc_html__('This profile is not public now or only employers can see.', 'iwjob'); ?>
                 </span>
             </div>
        </div>
<?php 
     }
     elseif($check == 1) //user is profile owner or is an employer, show everything
     {
?>
            <div class="iw-parallax" data-iw-paraspeed="0.1" style="background-image: url('<?php echo esc_url($cover_image_url); ?>');"></div>
            <div class="iw-parallax-overlay"></div>
            <div class="content-top">
                <div class="container">
                    <div class="info-top">
                        <div class="candidate-logo">        
            

Если вы хотите больше тестов, например о том, что профиль публикуется c или нет, вам действительно нужно предоставьте дополнительную информацию. Надеюсь, это поможет вам.

...