From c865441eb9ff0a36155379c10477e634e26c5e76 Mon Sep 17 00:00:00 2001 From: Keith Solomon Date: Thu, 30 Jan 2025 15:49:24 -0600 Subject: [PATCH] =?UTF-8?q?=F0=9F=96=A5=EF=B8=8F=20wip:=20working=20on=20t?= =?UTF-8?q?ext=20search=20of=20taxonomy=20terms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/script.js | 12 ++++- resource-filter.php | 105 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 107 insertions(+), 10 deletions(-) diff --git a/assets/script.js b/assets/script.js index 4f71fb0..310788c 100644 --- a/assets/script.js +++ b/assets/script.js @@ -11,7 +11,17 @@ jQuery(document).ready(function ($) { }; $.post(resourceFilterAjax.ajaxurl, formData, function (response) { - $('#resource-results').html(response); + response = JSON.parse(response); + + $('#resource-results').html(response.html); + $('#result-count').text(response.count); + + let filters = []; + if (response.filters.search) filters.push('Search: "' + response.filters.search + '"'); + if (response.filters.resource_type) filters.push('Type: ' + $('#resource_type option:selected').text()); + if (response.filters.resource_subject) filters.push('Subject: ' + $('#resource_subject option:selected').text()); + + $('#applied-filters').text(filters.length ? filters.join(', ') : 'None'); }); }); }); diff --git a/resource-filter.php b/resource-filter.php index 015e5db..504eb15 100644 --- a/resource-filter.php +++ b/resource-filter.php @@ -1,7 +1,7 @@ Filter + +
+ Showing 0 resources +

Filters applied: None

+
+
loadResources(); ?>
+ 'resource', + // 'posts_per_page' => -1, + // 'tax_query' => [], + // 's' => isset($_POST['search']) ? sanitize_text_field($_POST['search']) : '', + // ]; + + $search_term = isset($_POST['search']) ? sanitize_text_field($_POST['search']) : ''; + $query_args = [ 'post_type' => 'resource', 'posts_per_page' => -1, - 'tax_query' => [], - 's' => isset($_POST['search']) ? sanitize_text_field($_POST['search']) : '', + 'tax_query' => ['relation' => 'OR'], // Allows matching by search OR taxonomy + 'meta_query' => [ + 'relation' => 'OR', + [ + 'key' => 'post_title', + 'value' => $search_term, + 'compare' => 'LIKE' + ], + [ + 'key' => 'post_content', + 'value' => $search_term, + 'compare' => 'LIKE' + ] + ] ]; + if (!empty($search_term)) { + $query_args['tax_query'][] = [ + 'taxonomy' => 'resource_type', + 'field' => 'name', // Search by the name of the taxonomy term + 'terms' => $search_term, + 'operator' => 'LIKE' + ]; + + $query_args['tax_query'][] = [ + 'taxonomy' => 'resource_subject', + 'field' => 'name', + 'terms' => $search_term, + 'operator' => 'LIKE' + ]; + } + + if (!empty($_POST['resource_type'])) { + $query_args['tax_query'][] = [ + 'taxonomy' => 'resource_type', + 'field' => 'slug', + 'terms' => sanitize_text_field($_POST['resource_type']) + ]; + } + + if (!empty($_POST['resource_subject'])) { + $query_args['tax_query'][] = [ + 'taxonomy' => 'resource_subject', + 'field' => 'slug', + 'terms' => sanitize_text_field($_POST['resource_subject']) + ]; + } + if (!empty($_POST['resource_type']) || !empty($_POST['resource_subject'])) { - $query_args['tax_query']['relation'] = 'AND'; // Ensures both must match + $query_args['tax_query']['relation'] = 'AND'; if (!empty($_POST['resource_type'])) { $query_args['tax_query'][] = [ @@ -94,9 +154,36 @@ class ResourceFilterPlugin { } } - error_log(print_r($query_args, true)); // Add this to debug query args + $query = new WP_Query($query_args); + ob_start(); - $this->loadResources($query_args); + if ($query->have_posts()) { + echo '
'; + while ($query->have_posts()) { + $query->the_post(); + echo ''; + } + echo '
'; + } else { + echo '

No resources found.

'; + } + + print_r($query_args); + + wp_reset_postdata(); + + // Prepare response JSON + $response = [ + 'count' => $query->found_posts, + 'filters' => [ + 'search' => isset($_POST['search']) ? sanitize_text_field($_POST['search']) : '', + 'resource_type' => !empty($_POST['resource_type']) ? sanitize_text_field($_POST['resource_type']) : '', + 'resource_subject' => !empty($_POST['resource_subject']) ? sanitize_text_field($_POST['resource_subject']) : '' + ], + 'html' => ob_get_clean() + ]; + + echo json_encode($response); wp_die(); } @@ -104,12 +191,12 @@ class ResourceFilterPlugin { $query = new WP_Query($query_args); if ($query->have_posts()) { - echo ''; + echo ''; } else { echo '

No resources found.

'; }