From f19807771635424a03bb16302caf5a28931f82a6 Mon Sep 17 00:00:00 2001 From: Jack Arturo Date: Sun, 10 Aug 2025 22:42:11 +0200 Subject: [PATCH] Adds SearchWP integration --- echodash.php | 3 + .../searchwp/class-echodash-searchwp.php | 190 ++++++++++++++++++ .../integrations/searchwp/searchwp-icon.png | Bin 0 -> 5689 bytes 3 files changed, 193 insertions(+) create mode 100644 includes/integrations/searchwp/class-echodash-searchwp.php create mode 100644 includes/integrations/searchwp/searchwp-icon.png diff --git a/echodash.php b/echodash.php index 8708aa3..f92d256 100755 --- a/echodash.php +++ b/echodash.php @@ -265,6 +265,7 @@ private function integrations_includes() { 'affiliatewp' => 'Affiliate_WP', 'bbpress' => 'bbPress', 'buddypress' => 'BuddyPress', + 'clickwhale' => 'clickwhale', 'edd' => 'Easy_Digital_Downloads', 'edd-software-licensing' => 'EDD_Software_Licensing', 'edd-recurring' => 'EDD_Recurring', @@ -273,6 +274,8 @@ private function integrations_includes() { 'give' => 'Give', 'learndash' => 'SFWD_LMS', 'lifterlms' => 'LLMS', + 'pretty-links' => 'PrliLink', + 'searchwp' => 'SearchWP', 'woocommerce' => 'WooCommerce', 'woo-subscriptions' => 'WC_Subscriptions_Product', ); diff --git a/includes/integrations/searchwp/class-echodash-searchwp.php b/includes/integrations/searchwp/class-echodash-searchwp.php new file mode 100644 index 0000000..13f63bf --- /dev/null +++ b/includes/integrations/searchwp/class-echodash-searchwp.php @@ -0,0 +1,190 @@ + array( + 'name' => __( 'Search Performed', 'echodash' ), + 'description' => __( 'Triggered when a user performs a search using SearchWP.', 'echodash' ), + 'has_global' => true, + 'option_types' => array( 'search' ), + 'enabled_by_default' => false, + 'default_event' => array( + 'name' => __( 'Search Query', 'echodash' ), + 'mappings' => array( + 'search_terms' => '{search:search_terms}', + 'results_count' => '{search:results_count}', + 'engine_name' => '{search:engine_name}', + ), + ), + ), + 'search_no_results' => array( + 'name' => __( 'Search No Results', 'echodash' ), + 'description' => __( 'Triggered when a user performs a search that returns zero results.', 'echodash' ), + 'has_global' => true, + 'option_types' => array( 'search' ), + 'enabled_by_default' => true, + 'default_event' => array( + 'name' => __( 'Search No Results', 'echodash' ), + 'mappings' => array( + 'search_terms' => '{search:search_terms}', + 'engine_name' => '{search:engine_name}', + ), + ), + ), + ); + + return $triggers; + } + + /** + * Gets the search options. + * + * @since 2.0.0 + * + * @return array The search options. + */ + public function get_search_options() { + return array( + 'name' => __( 'SearchWP Query', 'echodash' ), + 'type' => 'search', + 'options' => array( + array( + 'meta' => 'search_terms', + 'preview' => __( 'wordpress tutorial', 'echodash' ), + 'placeholder' => __( 'The search terms entered by the user', 'echodash' ), + ), + array( + 'meta' => 'results_count', + 'preview' => '42', + 'placeholder' => __( 'The number of results found', 'echodash' ), + ), + array( + 'meta' => 'query_time', + 'preview' => '0.125', + 'placeholder' => __( 'Search execution time in seconds', 'echodash' ), + ), + array( + 'meta' => 'engine_name', + 'preview' => __( 'default', 'echodash' ), + 'placeholder' => __( 'The SearchWP engine used', 'echodash' ), + ), + array( + 'meta' => 'timestamp', + 'preview' => gmdate( 'Y-m-d H:i:s' ), + 'placeholder' => __( 'When the search was performed', 'echodash' ), + ), + ), + ); + } + + /** + * Handle search query performed event. + * + * @since 2.0.0 + * + * @param object $query The SearchWP Query object. + */ + public function search_query_performed( $query ) { + if ( empty( $query ) || ! method_exists( $query, 'get_keywords' ) ) { + return; + } + + // Get search data. + $search_terms = $query->get_keywords(); + $results_count = isset( $query->found_results ) ? (int) $query->found_results : 0; + $query_time = isset( $query->query_time ) ? (float) $query->query_time : 0; + $engine_name = method_exists( $query, 'get_engine' ) && method_exists( $query->get_engine(), 'get_name' ) ? $query->get_engine()->get_name() : 'default'; + + // Create search data array. + $search_data = array( + 'search_terms' => $search_terms, + 'results_count' => $results_count, + 'query_time' => $query_time, + 'engine_name' => $engine_name, + 'timestamp' => current_time( 'mysql' ), + ); + + // Determine which trigger to fire. + if ( $results_count > 0 ) { + // Track successful search. + $this->track_event( + 'search_performed', + array(), + array( + 'search' => $search_data, + ) + ); + } else { + // Track zero results search. + $this->track_event( + 'search_no_results', + array(), + array( + 'search' => $search_data, + ) + ); + } + } +} + +new EchoDash_SearchWP(); diff --git a/includes/integrations/searchwp/searchwp-icon.png b/includes/integrations/searchwp/searchwp-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0ad61fb1c3f1ce950b0082b4508e0d8a5b2723c5 GIT binary patch literal 5689 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