diff --git a/public_html/wp-content/themes/wporg-pattern-directory-2024/inc/block-config.php b/public_html/wp-content/themes/wporg-pattern-directory-2024/inc/block-config.php
index 913e5a10..bfab4828 100644
--- a/public_html/wp-content/themes/wporg-pattern-directory-2024/inc/block-config.php
+++ b/public_html/wp-content/themes/wporg-pattern-directory-2024/inc/block-config.php
@@ -18,7 +18,7 @@
add_filter( 'wporg_query_filter_options_sort', __NAMESPACE__ . '\get_sort_options' );
add_action( 'wporg_query_filter_in_form', __NAMESPACE__ . '\inject_other_filters' );
add_filter( 'wporg_favorite_button_settings', __NAMESPACE__ . '\get_favorite_settings', 10, 2 );
-add_filter( 'render_block_core/search', __NAMESPACE__ . '\inject_category_search_block' );
+add_filter( 'render_block_core/search', __NAMESPACE__ . '\inject_filters_search_block', 10, 2 );
add_filter( 'wporg_block_navigation_menus', __NAMESPACE__ . '\add_site_navigation_menus' );
add_filter( 'render_block_core/query-title', __NAMESPACE__ . '\update_archive_title', 10, 2 );
add_filter( 'render_block_core/site-title', __NAMESPACE__ . '\update_site_title' );
@@ -315,24 +315,43 @@ function get_favorite_settings( $settings, $post_id ) {
}
/**
- * Inject the current category into the search form.
+ * Inject the current category, curation, and sorting into the pattern search form.
+ *
+ * Without these, a search resets the filters to their defaults, e.g. searching
+ * from `?curation=all` only returns curated patterns.
*
* @param string $block_content Search block markup.
+ * @param array $block Parsed search block.
*
* @return string
*/
-function inject_category_search_block( $block_content ) {
+function inject_filters_search_block( $block_content, $block ) {
global $wp_query;
- $category_inputs = '';
- $query_var = 'pattern-categories';
- if ( isset( $wp_query->query[ $query_var ] ) ) {
+
+ // Leave other search forms alone. The global header search sets `formAction` to submit to wordpress.org/search,
+ // and checking the attribute doesn't depend on the mu-plugin swapping the action before this filter runs.
+ if ( ! empty( $block['attrs']['formAction'] ) ) {
+ return $block_content;
+ }
+
+ $form = new \WP_HTML_Tag_Processor( $block_content );
+ if ( ! $form->next_tag( 'form' ) || untrailingslashit( (string) $form->get_attribute( 'action' ) ) !== untrailingslashit( home_url() ) ) {
+ return $block_content;
+ }
+
+ $filter_inputs = '';
+ $query_vars = array( 'pattern-categories', 'curation', 'order', 'orderby' );
+ foreach ( $query_vars as $query_var ) {
+ if ( ! isset( $wp_query->query[ $query_var ] ) ) {
+ continue;
+ }
$values = (array) $wp_query->query[ $query_var ];
foreach ( $values as $value ) {
- $category_inputs .= sprintf( '', esc_attr( $query_var ), esc_attr( $value ) );
+ $filter_inputs .= sprintf( '', esc_attr( $query_var ), esc_attr( $value ) );
}
}
- return str_replace( '', $category_inputs . '', $block_content );
+ return str_replace( '', $filter_inputs . '', $block_content );
}
/**