Added basic filter for media library

This commit is contained in:
Patrick 2026-04-24 11:16:03 +02:00
parent 644b0ccce8
commit 89f2585709
1 changed files with 30 additions and 35 deletions

View File

@ -149,58 +149,54 @@ class MediaManager {
return; return;
} }
$selected = isset( $_GET[ 'ttgf_media_folder' ] ) ? $_GET[ 'ttgf_media_folder' ] : false; $selected = isset( $_GET[ $this->taxonomy ] ) ? $_GET[ $this->taxonomy ] : false;
wp_dropdown_categories([ $dropdown = wp_dropdown_categories([
'show_option_all' => 'All folders', 'show_option_all' => 'All Tags',
'taxonomy' => 'ttgf_media_folder', 'taxonomy' => $this->taxonomy,
'name' => 'ttgf_media_folder', 'name' => $this->taxonomy,
'orderby' => 'name', 'orderby' => 'name',
'selected' => $selected, 'selected' => $selected,
'hierarchical' => true, 'hierarchical' => true,
'value_field' => 'name', 'value_field' => 'term_id',
'depth' => 3, 'depth' => 3,
'hide_empty' => true, 'hide_empty' => true,
'echo' => false
]); ]);
echo '<select name="ttgf_media_folder_filter">'; $dropdown = str_replace('<select ', '<select multiple ', $dropdown);
echo '<option>Select Filter</option>';
echo '<option value="show_hidden">Display hidden</option>';
echo '</select>';
echo $dropdown;
return;
/*$terms = get_terms([ 'taxonomy' => 'ttgf_media_folder', 'hide_empty' => false ]);
echo '<select name="ttgf_media_folder_filter">';
echo '<option value="">All Folders</option>';
foreach ( $terms as $term ) {
echo "<option value='{$term->slug}'>{$term->name}</option>";
}
echo '</select>';*/
} }
public function apply_list_filter( $query ) { public function apply_list_filter( $query ) {
if ( ! is_admin() || $query->is_main_query() ) { if ( ! is_admin() || ! $query->is_main_query() ) {
return;
}
if ($query->get('post_type') !== 'attachment') {
return; return;
} }
if (!empty($_GET['media_folder_filter'])) { if (!empty($_GET[$this->taxonomy])) {
$id = $_GET[$this->taxonomy];
$tag = $this->tags->get_by_id((int)$id);
if ( $tag === null ) {
return;
}
$tags = array_merge([$tag], $tag->get_all_children());
$ids = array_map(fn ($t) => $t->id, $tags);
unset($query->query_vars['ttgf_media_tags']);
$query->set('tax_query', [[ $query->set('tax_query', [[
'taxonomy' => 'ttgf_media_folder', 'taxonomy' => 'ttgf_media_tags',
'field' => 'name', 'field' => 'term_id',
'terms' => $_GET['ttgf_media_folder'], 'terms' => [$ids[0]],
'include_children' => true,
]]); ]]);
} }
$show_hidden = isset($_GET['ttgf_media_folder_filter']) && $_GET['ttgf_media_folder_filter'] != "show_hidden";
$query->set('meta_query', [[
'key' => 'ttgf_media_hidden',
'value' => ( ! $show_hidden),
'compare' => '!='
]]);
} }
private function _build_dropdown( $name, $options, $selected, $empty = true ) { private function _build_dropdown( $name, $options, $selected, $empty = true ) {
@ -215,4 +211,3 @@ class MediaManager {
} }
new MediaManager(); new MediaManager();