diff --git a/wowchemy/layouts/partials/widgets/portfolio.html b/wowchemy/layouts/partials/widgets/portfolio.html
index 59f95a24..2acca632 100644
--- a/wowchemy/layouts/partials/widgets/portfolio.html
+++ b/wowchemy/layouts/partials/widgets/portfolio.html
@@ -3,7 +3,6 @@
{{/* Initialise */}}
{{ $ := .root }}
{{ $st := .page }}
-{{ $items_type := $st.Params.content.page_type | default "project" }}
{{ $columns := $st.Params.design.columns | default "2" }}
{{ $view := $st.Params.design.view | default "masonry" }}
@@ -47,12 +46,26 @@
- {{ $query := "" }}
- {{ if $st.Params.content.filters.tags }}
- {{ $query = where site.Pages "Params.tags" "intersect" $st.Params.content.filters.tags }}
- {{ else }}
- {{ $query = where site.RegularPages "Type" $items_type }}
+ {{/* Query */}}
+ {{ $query := site.RegularPages }}
+
+ {{/* Filters */}}
+ {{ with $st.Params.content.page_type }}
+ {{/* Legacy filter, superseded by `filters.folders` */}}
+ {{ $query = where $query "Type" . }}
{{ end }}
+ {{ with $st.Params.content.filters.folders }}
+ {{ $query = where $query "Section" "in" . }}
+ {{ end }}
+ {{ with $st.Params.content.filters.tags }}
+ {{ $query = where $query "Params.tags" "intersect" . }}
+ {{ end }}
+
+ {{/* Sort */}}
+ {{ $sort_by := $st.Params.content.sort_by | default "Date" }}
+ {{ $sort_ascending := $st.Params.content.sort_ascending | default (eq $st.Params.content.order "asc") | default false }}
+ {{ $sort_order := cond $sort_ascending "asc" "desc" }}
+ {{ $query = sort $query $sort_by $sort_order }}
{{ range $index, $item := $query }}
{{ $js_tag_classes := delimit (apply (apply $item.Params.tags "replace" "." " " "-") "printf" "js-id-%s" ".") " " }}