Search System
Multisite search functionality with cross-site result integration.
Search Architecture
Theme search template: inc/archives/archive.php (search routes here by default via extrachill_template_search)
Search header: inc/archives/archive-header.php (the same template used for archives; includes an is_search() title case)
Search styling: assets/css/search.css (loaded when is_search() is true)
The extrachill-search plugin can override the template by returning its own path from extrachill_template_search.
Search Components
Search Form
Location: /inc/core/templates/searchform.php
Function: extrachill_search_form()
Used in:
- Header search overlay (
inc/header/header-search.php) - Search pages
- No results templates
Search Header
Location: inc/archives/archive-header.php
Hook: extrachill_search_header
Default handler: extrachill_default_search_header() in inc/core/actions.php (includes archive-header.php)
Displays:
- Search query (via the
is_search()title case) - Optional actions area via
extrachill_archive_header_actions
Site Badges
Rendered by the extrachill-search plugin when multisite results are available to identify each network source.
Multisite Search
Multisite search behavior is owned by the extrachill-search plugin.
- The theme exposes
extrachill_template_searchso the plugin can swap in its own template. - The theme will also render cross-site taxonomies correctly for results that include an
_origin_site_idproperty (seeinc/core/templates/taxonomy-badges.php).
Search Result Display
Search uses the archive template loop (inc/archives/archive.php) and renders:
do_action( 'extrachill_search_header' )(defaults toarchive-header.php)do_action( 'extrachill_archive_above_posts' )(filter bar hooks typically live here)get_template_part( 'inc/archives/post-card' )to render each result
Multisite/forum results formatting is primarily handled by the extrachill-search plugin (the theme just renders the post objects it is given).
Search URL Structure
/?s=search+term
Query Variable: s (WordPress standard)
Search Assets
CSS: assets/css/search.css
Loading: extrachill_enqueue_search_styles() in inc/core/assets.php
Condition: is_search()
Theme Responsibilities
The theme:
- provides the archive/search header UI (
inc/archives/archive-header.phpviaextrachill_search_header) - provides base templates and hooks (
extrachill_template_search,extrachill_archive_header_actions) - renders the post objects it receives (local WP query or plugin-provided results)
Multisite Search Details
Implementation details for cross-site searching live in extrachill-search. This theme intentionally does not duplicate that logic.
Search Result Metadata
Search results render the post objects they are given (either the WordPress main query, or plugin-provided results).
No Results Handling
Template: /inc/core/templates/no-results.php
Displays when search returns zero results:
- "No results found" message
- Search form for a new search
Search Pagination
Search results use standard theme pagination:
extrachill_pagination();
Plugin Integration
Override Search Template
add_filter( 'extrachill_template_search', function( $template ) {
return MY_PLUGIN_DIR . '/templates/custom-search.php';
} );
Modify Search Behavior
When extrachill-search is active, it owns multisite searching and result composition. Theme-side pre_get_posts customization only applies when the WordPress main query is responsible for results.
Add Search Header Content
add_action( 'extrachill_search_header', function() {
echo '<div class="search-filter">...</div>';
}, 15 );
Graceful Degradation
Theme search works without extrachill-search:
- Without plugin: the WordPress main query provides local search results.
- With plugin: the plugin can override
extrachill_template_search(and/or populate the main query) to provide multisite results.
Search Form Accessibility
Search form markup uses standard WordPress form semantics with explicit labels/ARIA attributes.
Performance
- Plugin-level optimization via extrachill-search
- Direct database queries with
switch_to_blog() - WordPress core multisite caching (blog ID mapping is centralized via
ec_get_blog_id()) - Efficient cross-site query patterns
- Pagination limits result sets
- Conditional asset loading (
search.cssonly on search pages)