PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.8.1
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.8.1
4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.5.2 All 199 releases
betterdocs / includes / Shortcodes / SearchForm.php

SearchForm.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 3.8.1, at includes/Shortcodes/SearchForm.php

126 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPDeveloper\BetterDocs\Shortcodes;
4
5 use WPDeveloper\BetterDocs\Core\Query;
6 use WPDeveloper\BetterDocs\Utils\Helper;
7 use WPDeveloper\BetterDocs\Core\Settings;
8 use WPDeveloper\BetterDocs\Core\Shortcode;
9 use WPDeveloper\BetterDocs\Admin\Customizer\Defaults;
10
11 class SearchForm extends Shortcode {
12 public function __construct( Settings $settings, Query $query, Helper $helper, Defaults $defaults ) {
13 parent::__construct( $settings, $query, $helper, $defaults );
14
15 add_action( 'wp_ajax_nopriv_betterdocs_get_search_result', [$this, 'get_search_results'] );
16 add_action( 'wp_ajax_betterdocs_get_search_result', [$this, 'get_search_results'] );
17 }
18
19 public function get_style_depends() {
20 $handlers = ['betterdocs-search'];
21 return $handlers;
22 }
23
24 public function get_script_depends() {
25 $handlers = ['betterdocs-search'];
26
27 if(is_tax()){
28 $handlers[] = 'betterdocs-glossaries';
29 }
30 return $handlers;
31 }
32
33 public function get_search_results() {
34 global $wpdb;
35 $search_input = isset( $_POST['search_input'] ) ? sanitize_text_field( $_POST['search_input'] ) : '';
36 $search_cat = isset( $_POST['search_cat'] ) ? wp_strip_all_tags( $_POST['search_cat'] ) : '';
37 $lang = isset( $_POST['lang'] ) ? wp_strip_all_tags( $_POST['lang'] ) : '';
38 $search_input = preg_replace( '/[^A-Za-z0-9_\- ][]]/', '', strtolower( $search_input ) );
39
40 $tax_query = [];
41 if ( $search_cat ) {
42 $tax_query = [
43 [
44 'taxonomy' => 'doc_category',
45 'field' => 'slug',
46 'terms' => $search_cat,
47 'operator' => 'AND',
48 'include_children' => true
49 ]
50 ];
51 }
52
53 $term = get_term_by( 'slug', $search_cat );
54
55 $args = [
56 'term_id' => isset( $term->term_id ) ? $term->term_id : 0,
57 'post_type' => 'docs',
58 'post_status' => 'publish',
59 'posts_per_page' => -1,
60 'suppress_filters' => true,
61 's' => $search_input,
62 'orderby' => 'relevance',
63 'tax_query' => $tax_query
64 ];
65
66 if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) {
67 $args['suppress_filters'] = false;
68 $args['lang'] = ICL_LANGUAGE_CODE;
69 }
70
71 $search_results = $this->query->get_posts( $args );
72
73 $response = [];
74
75 ob_start();
76 betterdocs()->views->get( 'shortcode-parts/search-results', [
77 'search_results' => $search_results,
78 'search_input' => $search_input
79 ] );
80
81 $_output = ob_get_clean();
82
83 $_input_not_found = '';
84 if ( ! $search_results->have_posts() ) {
85 $_input_not_found = $search_input;
86 }
87
88 $response['post_lists'] = $_output;
89
90 if ( $_output && strlen( $search_input ) >= 3 ) {
91 betterdocs()->query->insert_search_keyword( $search_input, $_input_not_found );
92 }
93
94 wp_reset_query();
95 wp_reset_postdata();
96
97 wp_send_json_success( $response );
98 }
99
100 public function get_name() {
101 return 'betterdocs_search_form';
102 }
103
104 /**
105 * Summary of default_attributes
106 * @return array
107 */
108 public function default_attributes() {
109 return apply_filters( 'betterdocs_search_form_attr', [
110 'placeholder' => __( 'Search', 'betterdocs' ),
111 'heading' => '',
112 'subheading' => '',
113 'heading_tag' => 'h2',
114 'subheading_tag' => 'h3'
115 ] );
116 }
117
118 public function render( $atts, $content = null ) {
119 betterdocs()->assets->localize( 'betterdocs-search', 'betterdocsSearchConfigTwo', [
120 'is_post_type_archive' => is_post_type_archive( 'docs' ),
121 ] );
122
123 $this->views( 'shortcodes/search' );
124 }
125 }
126