Stacking Filtering & Sorting with URL Parameter

You mean add additional params to the existing params, I guess. So when the filter param is active, also add sorting?

<a href="<?= $page->url() ?>?filter=">All</a>
      <?php foreach ($filters as $filter): ?>
        <a href="<?= url($page->url(), ['params' => ['filterby' => $filter, 'sortby' => param('sortBy']]) ?>">
            <?= html($filter) ?>
        </a>
      <?php endforeach ?>
<a href="<?= url($page->url(), ['params' => ['filterby' => param('filterby'), 'sortBy' => 'title']]) ?>">
    <?= 'Sort by title' ?>
</a>

In controller:

return function($page) {

        $filterBy = param('filterBy');
        $sortBy   = param('sortBy');

        $works = $page
        ->children()
        ->listed()
        ->when($filterBy, fn($filterBy) => $this->filterBy('category', $filterBy))
        ->when($sortBy, function($sortBy) {
            // depending what you want to sort by use conditions here
            return $this->sortBy($sortBy);
        });



    return [
        'filterBy' => $filterBy,
        'sortBy'   => $sortBy,
        'works'    => $works->paginate(6),
        'filters'  => $works->pluck('category', ',', true),
    ];

};