Filter by various fields but not multiple fields at once

Hello,

I am trying to filter by two different fields but struggling to succeed. I do not need to filter by both at once—just one or the other.

For instance, we would like to filter journalEntries by the containsMedia field or by the entryType field (but not both at once). Each of the filters seem to work individually when I remove the other function, however, I have been struggling to make them work the way I’ve described. I imagine this is because journalEntries is defined in both functions although I could be wrong about that…

Is this something anyone could lend me a hand with?

Thank you for your time

<?php

// Entry-type filter
$filterByEntry = get('entry');
$unfilteredByEntry = $page->children()->listed();
$journalEntries = $unfilteredByEntry
    ->when($filterByEntry, function($filterByEntry) {
        return $this->filterBy('entryType', $filterByEntry);
    });
$entryFilters = $unfilteredByEntry->sortBy('entryType', 'asc')->pluck('entryType', null, true);

// Contains-media filter
$filterByMedia = get('media');
$unfilteredByMedia = $page->children()->listed();
$journalEntries = $unfilteredByMedia
    ->when($filterByMedia, function($filterByMedia) {
        return $this->filterBy('containsMedia', $filterByMedia, ',');
    });
$mediaFilters = $unfilteredByMedia->sortBy('containsMedia', 'asc')->pluck('containsMedia', ',', true);

?>

<nav class="filters">
    <!-- Entry-type filter nav-->
    <ul>
        <li>Entry Type:</li>
        <?php foreach ($entryFilters as $entryFilter): ?>
        <li><a href="<?= $page->url() ?>?entry=<?= $entryFilter ?>"><?= $entryFilter ?></a></li>
        <?php endforeach ?>
    </ul>
    <!-- Contains-media filter nav-->
    <ul>
        <li>Contains Media:</li>
        <?php foreach ($mediaFilters as $mediaFilter): ?>
        <li><a href="<?= $page->url() ?>?media=<?= $mediaFilter ?>"><?= $mediaFilter ?></a></li>
        <?php endforeach ?>
    </ul>
</nav>
<?php
$filterByEntry = get('entry');
$filterByMedia = get('media');
$allItems = $page->children()->listed();
$items = $page->children()->listed()
  ->when($filterByEntry, function($filterByEntry) {
        return $this->filterBy('entryType', $filterByEntry);
    })
 ->when($filterByMedia, function($filterByMedia) {
        return $this->filterBy('containsMedia', $filterByMedia, ',');
    });

$entryFilters = $allItems->sortBy('entryType', 'asc')->pluck('entryType', null, true);
$mediaFilters = $allItems->sortBy('containsMedia', 'asc')->pluck('containsMedia', ',', true);


// then your navigation

// then the loop with the items

I really owe you a holiday present @texnixe. Thank you very much for always coming to my rescue <3