Получить точное совпадение условий таксономии, а не частичное совпадение - PullRequest
0 голосов
/ 10 ноября 2019

Я настроил цикл для отображения содержимого для ТОЧНОГО совпадения двух терминов таксономии. Тем не менее, код, который я использовал, включает в себя результаты с частичными совпадениями. Как настроить оператор IF, чтобы он отображал только точные совпадения?

Для небольшого контекста я должен получать результаты только в том случае, если возрастная группа точно 1-го и 2-го класса. Не те, которые включают 1-й и 2-й классы наряду с другими классами.

Вот код, который я использовал:

<div class="sc-age-group">
    <?php 
    $agegroup = wp_get_post_terms(get_the_ID(), 'camper_grade');
    if ($agegroup) {
        foreach ($agegroup as $group) {
            if ($group->name == "1st Grade" && "2nd Grade") { ?>
                <div class="sc-age-group_1-2">Grades 1 - 2</div> <?php ;
            }

        }
    }
    ?>
</div>

Ответы [ 2 ]

1 голос
/ 11 ноября 2019

Чтобы узнать, входят ли обе группы в ваш массив терминов, вам придется просмотреть их все и проверить их имя. Если они совпадают, сохраните их в другом массиве. Каждую итерацию вы подсчитываете массив, чтобы проверить, присутствуют ли обе группы. Затем вы можете распечатать HTML-код и разорвать цикл.

<div class="sc-age-group">
    <?php $agegroup = wp_get_post_terms(get_the_ID(), 'camper_grade') ?>
    <?php $groups = []; ?>

    <?php foreach ($agegroup as $group): ?>
        <?php if ($group->name === "1st Grade" || $group->name === "2nd Grade"): ?>
            <?php $groups[] = $group; ?>
            <?php if (count($groups) === 2): ?>
                <div class="sc-age-group_1-2">Grades 1 - 2</div>
                <?php break; ?>
            <?php endif; ?>
        <?php endif; ?>
    <?php endforeach; ?>
</div>

Чтобы снять обеспокоенность @ disinfor по поводу возможности использования двух терминов с одним и тем же именем (маловероятно, но наверняка возможно), я принял второе решение. Сначала он будет перебирать все термины, а после этого проверять, присутствуют ли оба значения 1st Grade и 2nd Grade.

<?php $agegroup = wp_get_post_terms(get_the_ID(), 'camper_grade') ?>
<?php $groupNames = []; ?>
<?php foreach ($agegroup as $group): ?>
    <?php $groupNames[] = $group->name; ?>
<?php endforeach; ?>

<div class="sc-age-group">
    <?php if (in_array('1st Grade', $groupNames) && in_array('2nd Grade', $groupNames)): ?>
        <div class="sc-age-group_1-2">Grades 1 - 2</div>         
    <?php endif; ?>
</div>

Еще одно добавление: я предлагаю вам использовать slug термина вместо name. slug должен быть уникальным для каждого термина, в отличие от name.

Учитывая, что слаг для 1st Grade равен 1st-grade, а слаг для 2nd Grade равен 2nd-grade:

<?php $agegroup = wp_get_post_terms(get_the_ID(), 'camper_grade') ?>
<?php $groupSlugs = []; ?>
<?php foreach ($agegroup as $group): ?>
    <?php $groupSlugs[] = $group->slug; ?>
<?php endforeach; ?>

<div class="sc-age-group">
    <?php if (in_array('1st-grade', $groupSlugs) && in_array('2nd-grade', $groupSlugs) && count($groupSlugs) < 3): ?>
        <div class="sc-age-group_1-2">Grades 1 - 2</div>         
    <?php endif; ?>
</div>
0 голосов
/ 14 ноября 2019

Я получил все, чтобы работать в значительной степени с кодом от @jrswgtr. Поскольку мой исходный код немного отличался от настроек @jrswgtr, вот мой окончательный код на случай, если он кому-нибудь поможет.

<?php 
  $agegroup = wp_get_post_terms(get_the_ID(), 'camper_grade');
    if ($agegroup) {
      foreach ($agegroup as $group) {
        if ($group->name == '1st Grade' && '2nd Grade' && count($agegroup) == 2) { ?>
            <div class="sc-age-group_1-2">Grades 1 - 2</div> <?php ;
        }       
      }
  }         
?>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...