Файловый менеджер - Редактировать - /var/www/portal.bdu.ac.bd/public_html/wp-content/themes/bduWP/framework/functions/search-live.php
Назад
<?php /* Based on Plugin : Ajaxy Live Search | http://ajaxy.org */ define('TIE_SEARCH_NO_IMAGE', get_stylesheet_directory_uri().'/images/no-image.png'); class TieLiveSearch { public static $woocommerce_taxonomies = array('product_cat', 'product_tag', 'product_shipping_class'); public static $woocommerce_post_types = array('product', 'shop_order', 'shop_coupon'); function __construct(){ add_action( 'wp_head', array(&$this, 'head')); add_action( 'wp_ajax_ajaxy_sf', array(&$this, 'get_search_results')); add_action( 'wp_ajax_nopriv_ajaxy_sf', array(&$this, 'get_search_results')); } // GET POST Types function get_post_types(){ //$post_types = get_post_types(array('_builtin' => false),'objects'); $post_types['post'] = get_post_type_object('post'); //$post_types['page'] = get_post_type_object('page'); unset($post_types['wpsc-product-file']); unset($post_types['tie_slider']); unset($post_types['shop_order']); unset($post_types['shop_coupon']); return $post_types; } // GET TAXONOMIES function get_taxonomies() { $args = array( 'public' => true, '_builtin' => false ); $output = 'objects'; // or objects $operator = 'or'; // 'and' or 'or' $taxonomies = get_taxonomies( $args, $output, $operator ); if ( $taxonomies ) { return $taxonomies; } return null; } // SEARCH OBJECTS function get_search_objects($all = false, $objects = false, $specific_post_types = array(), $specific_taxonomies = array(), $specific_roles = array()){ $search = array(); if(!$objects || $objects == 'post_type') { // get all post types that are ready for search $post_types = $this->get_post_types(); foreach($post_types as $post_type) { if(sizeof($specific_post_types) == 0) { $setting = $this->get_setting($post_type->name); if($setting -> show == 1 || $all){ $search[] = array( 'order' => $setting->order, 'name' => $post_type->name, 'label' => (empty($setting->title) ? $post_type->label : $setting->title), 'type' => 'post_type' ); } } elseif(in_array($post_type->name, $specific_post_types)) { $setting = $this->get_setting($post_type->name); $search[] = array( 'order' => $setting->order, 'name' => $post_type->name, 'label' => (empty($setting->title) ? $post_type->label : $setting->title), 'type' => 'post_type' ); } } } return $search; } // GET SETTINGS function get_setting($name, $public = true){ $defaults = array( 'title' => '', 'show' => 1, 'ushow' => 0, 'search_content' => 0, 'limit' => 3, 'order' => 0, 'order_results' => false ); if(!$public) { $defaults['show'] = 0; } return (object)$defaults; } // TEMPLATES function get_templates($template, $type='') { $template_post = ""; switch($type) { case 'more': $template_post = '<a href="{search_url_escaped}">'.__ti( 'View All Results', 'tie' ).'</a>'; break; case 'taxonomy': $template_post = '<a href="{category_link}">{name}</a>'; break; case 'author': case 'role': $template_post = '<a href="{author_link}">{user_nicename}</a>'; break; case 'post_type': if(in_array($template, self::$woocommerce_post_types)) { $template_post = '<a href="{post_link}">{post_image_html}<span class="live-search_text">{post_title} - {price}</span><span class="live-search_small">Posted by {post_author} on {post_date_formatted}</span></a>'; }else{ $template_post = '<a href="{post_link}">{post_image_html}<span class="live-search_text">{post_title} </span><p class="post-meta"><span class="post-meta-author"><i class="fa fa-user"></i> {post_author}</span><span class="tie-date"><i class="fa fa-clock-o"></i> {post_date_formatted}</span></p></a>'; } break; default: $template_post = '<a href="{post_link}">{post_image_html}<span class="live-search_text">{post_title} </span><p class="post-meta"><span class="post-meta-author"><i class="fa fa-user"></i> {post_author}</span><span class="tie-date"><i class="fa fa-clock-o"></i> {post_date_formatted}</span></p></a>'; break; } return $template_post; } // POSTS function posts($name, $post_type='post', $term_id = false) { global $wpdb; $posts = array(); $setting = (object)$this->get_setting($post_type); $excludes = ""; $excludes_array = array(); if(isset($setting->excludes) && sizeof($setting->excludes) > 0 && is_array($setting->excludes)){ $excludes = " AND ID NOT IN (".implode(',', $setting->excludes).")"; $excludes_array = $setting->excludes; } $order_results = ($setting->order_results ? " ORDER BY ".$setting->order_results : ""); $results = array(); $query = " SELECT $wpdb->posts.ID FROM $wpdb->posts WHERE (post_title LIKE '%%%s%%' ".($setting->search_content == 1 ? "or post_content LIKE '%%%s%%')":")")." AND post_status='publish' AND post_type='".$post_type."' $excludes $order_results LIMIT 0, %d"; $query = apply_filters("sf_posts_query", ($setting->search_content == 1 ? $wpdb->prepare($query, $name, $name, $setting->limit) :$wpdb->prepare($query, $name, $setting->limit)), $name, $post_type, $excludes_array, $setting->search_content, $order_results, $setting->limit); $results = $wpdb->get_results( $query ); if(sizeof($results) > 0 && is_array($results) && !is_wp_error($results)) { $template = $this->get_templates( $post_type, 'post_type' ); $matches = array(); preg_match_all ("/\{.*?\}/", $template, $matches); if(sizeof($matches) > 0) { foreach($results as $result) { $pst = $this->post_object($result->ID, $term_id, $matches[0]); if($pst){ $posts[] = $pst; } } } } return $posts; } // POST OBJECTS function post_object($id, $term_id = false, $matches = false) { $unset_array = array('post_date_gmt', 'post_status', 'comment_status', 'ping_status', 'post_password', 'post_content_filtered', 'to_ping', 'pinged', 'post_modified', 'post_modified_gmt', 'post_parent', 'guid', 'menu_order', 'post_mime_type', 'comment_count', 'ancestors', 'filter'); global $post; $date_format = get_option( 'date_format' ); $post = get_post($id); if($term_id) { if(!in_category($term_id, $post->ID)){ return false; } } $size = array( 'height' => 150 , 'width' => 150 ); if($post != null) { $post_object = new stdclass(); $post_link = get_permalink($post->ID); if(in_array('{post_image}', $matches) || in_array('{post_image_html}', $matches)) { $post_thumbnail_id = get_post_thumbnail_id( $post->ID); if( $post_thumbnail_id > 0) { $thumb = wp_get_attachment_image_src( $post_thumbnail_id, 'tie-small' ); $post_object->post_image = (trim($thumb[0]) == "" ? TIE_SEARCH_NO_IMAGE : $thumb[0]); if(in_array('{post_image_html}', $matches)) { $post_object->post_image_html = '<div class="post-thumbnail"><img src="'.$post_object->post_image.'" width="'.$size['width'].'" height="'.$size['height'].'" alt="" /></div>'; } } else{ $post_object->post_image_html = '<div class="post-thumbnail"><img src="'.TIE_SEARCH_NO_IMAGE.'" width="'.$size['width'].'" height="'.$size['height'].'" alt="" /></div>'; } } if($post->post_type == "wpsc-product"){ if(function_exists('wpsc_calculate_price')){ if(in_array('{wpsc_price}', $matches)){ $post_object->wpsc_price = wpsc_the_product_price(); }if(in_array('{wpsc_shipping}', $matches)){ $post_object->wpsc_shipping = strip_tags(wpsc_product_postage_and_packaging()); }if(in_array('{wpsc_image}', $matches)){ $post_object->wpsc_image = wpsc_the_product_image($size['height'], $size['width']); } } } if($post->post_type == 'product' && class_exists('WC_Product_Factory')) { $product_factory = new WC_Product_Factory(); global $product; $product = $product_factory->get_product($post); if($product->is_visible()) { foreach($matches as $match) { $match = str_replace(array('{', '}'), '', $match); if(in_array($match, array('categories', 'tags'))) { $method = "get_".$match; if(method_exists ($product, $method)){ $term_list = call_user_func(array($product, $method), ''); if($term_list){ $post_object->{$match} = '<span class="live-search_list live-search_'.$match.'">'.$term_list.'</span>'; }else{ $post_object->{$match} = ""; } } }elseif($match == 'add_to_cart_button'){ ob_start(); do_action( 'woocommerce_' . $product->product_type . '_add_to_cart' ); $post_object->{$match} = '<div class="product">'.ob_get_contents().'</div>'; ob_end_clean(); }else{ $method = "get_".$match; if(method_exists ($product, $method)){ $post_object->{$match} = call_user_func(array($product, $method)); }elseif(method_exists ($product, $match)){ $post_object->{$match} = call_user_func(array($product, $match)); } } } } } $post_object->ID = $post->ID; $post_object->post_title = get_the_title($post->ID); if(in_array('{post_excerpt}', $matches)) { $post_object->post_excerpt = $post->post_excerpt; }if(in_array('{post_author}', $matches)) { $post_object->post_author = get_the_author_meta('display_name', $post->post_author); }if(in_array('{post_link}', $matches)) { $post_object->post_link = $post_link; }if(in_array('{post_content}', $matches)) { $post_object->post_content = $this->get_text_words(apply_filters('the_content', $post->post_content) , 10 ); }if(in_array('{post_date_formatted}', $matches)) { $post_object->post_date_formatted = date($date_format, strtotime( $post->post_date) ); } foreach($matches as $match) { $match = str_replace(array('{', '}'), '', $match); if(strpos($match, 'custom_field_') !== false){ $key = str_replace('custom_field_', '', $match); $custom_field = get_post_meta($post->ID, $key, true); if ( is_array($custom_field) ) { $cf_name = 'custom_field_'.$key; $post_object->{$cf_name} = apply_filters('sf_post_custom_field', $custom_field[0], $key, $post); }else{ $cf_name = 'custom_field_'.$key; $post_object->{$cf_name} = apply_filters('sf_post_custom_field', $custom_field, $key, $post); } } } $post_object = apply_filters('sf_post', $post_object); return $post_object; } return false; } // REMOVE HTML AND SHORTCODES FROM TEXT function get_text_words($text, $count) { $tr = explode(' ', strip_tags(strip_shortcodes($text))); $s = ""; for($i = 0; $i < $count && $i < sizeof($tr); $i++) { $s[] = $tr[$i]; } return implode(' ', $s); } // HEAD function head() { wp_register_script( 'tie-search', get_template_directory_uri() . '/js/search.js', array( 'jquery' ), false, true ); wp_enqueue_script( 'tie-search' ); $settings = array( 'label' => 'Search' , 'expand' => false ); $live_search_settings = json_encode( array( 'expand' => $settings['expand'] ,'searchUrl' => home_url().'/?s=%s' ,'text' => $settings['label'] ,'delay' => 500 ,'iwidth' => 180 ,'width' => 315 ,'ajaxUrl' => $this->get_ajax_url() ,'rtl' => 0 ) ); ?> <script type="text/javascript"> /* <![CDATA[ */ var sf_position = '0'; var sf_templates = <?php echo json_encode($this->get_templates('more', 'more')); ?>; var sf_input = '.search-live'; jQuery(document).ready(function(){ jQuery(sf_input).ajaxyLiveSearch(<?php echo $live_search_settings; ?>); jQuery(".live-search_ajaxy-selective-input").keyup(function() { var width = jQuery(this).val().length * 8; if(width < 50) { width = 50; } jQuery(this).width(width); }); jQuery(".live-search_ajaxy-selective-search").click(function() { jQuery(this).find(".live-search_ajaxy-selective-input").focus(); }); jQuery(".live-search_ajaxy-selective-close").click(function() { jQuery(this).parent().remove(); }); }); /* ]]> */ </script> <?php } // GET AJAX URL function get_ajax_url(){ if(defined('ICL_LANGUAGE_CODE')){ return admin_url('admin-ajax.php').'?lang='.ICL_LANGUAGE_CODE; } if(function_exists('qtrans_getLanguage')){ return admin_url('admin-ajax.php').'?lang='.qtrans_getLanguage(); } return admin_url('admin-ajax.php'); } // GET SEARCH RESULTS function get_search_results(){ $results = array(); $sf_value = apply_filters('sf_value', $_POST['sf_value']); if(!empty($sf_value)) { //filter taxonomies if set $arg_taxonomies = isset($_POST['taxonomies']) && trim($_POST['taxonomies']) != "" ? explode(',', trim($_POST['taxonomies'])) : array(); // override post_types from input $arg_post_types = isset($_POST['post_types']) && trim($_POST['post_types']) != "" ? explode(',', trim($_POST['post_types'])) : array(); $search = $this->get_search_objects(false, false, $arg_post_types, $arg_taxonomies); $author_searched = false; $authors = array(); foreach($search as $key => $object) { if($object['type'] == 'post_type') { $posts_result = $this->posts($sf_value, $object['name']); if(sizeof($posts_result) > 0) { $results[$object['name']][0]['all'] = $posts_result; $results[$object['name']][0]['template'] = $this->get_templates($object['name'], 'post_type'); $results[$object['name']][0]['title'] = $object['label']; $results[$object['name']][0]['class_name'] = 'live-search_item'.(in_array($object['name'], self::$woocommerce_post_types) ? ' woocommerce': ''); } } elseif($object['type'] == 'taxonomy') { if($object['show_posts']) { $taxonomy_result = $this->category($sf_value, $object['name'], $object['show_posts']); if(sizeof($taxonomy_result) > 0) { $cnt = 0; foreach($taxonomy_result as $key => $val) { if(sizeof($val['posts']) > 0) { $results[$object['name']][$cnt]['all'] = $val['posts']; $results[$object['name']][$cnt]['template'] = $this->get_templates($object['name'], 'taxonomy'); $results[$object['name']][$cnt]['title'] = $object['label']; $results[$object['name']][$cnt]['class_name'] = 'live-search_category'; $cnt ++; } } } }else{ $taxonomy_result = $this->category($sf_value, $object['name']); if(sizeof($taxonomy_result) > 0) { $results[$object['name']][0]['all'] = $taxonomy_result; $results[$object['name']][0]['template'] = $this->get_templates($object['name'], 'taxonomy'); $results[$object['name']][0]['title'] = $object['label']; $results[$object['name']][0]['class_name'] = 'live-search_category'; } } }elseif($object['type'] == 'role') { $users = array(); if(!$author_searched) { $authors = $this->author($sf_value, $object['name']); $users = $this->filter_authors_by_role($authors, $object['name']); $author_searched = true; }else{ $users = $this->filter_authors_by_role($authors, $object['name']); } if(sizeof($users) > 0) { $results[$object['name']][0]['all'] = $users; $results[$object['name']][0]['template'] = $this->get_templates($object['name'], 'author'); $results[$object['name']][0]['title'] = $object['label']; $results[$object['name']][0]['class_name'] = 'live-search_category'; } } } $results = apply_filters('sf_results', $results); echo json_encode($results); } do_action( 'sf_value_results', $sf_value, $results); exit; } } add_filter('sf_category_query', 'sf_category_query', 4, 10); function sf_category_query($query, $search, $excludes, $limit){ global $wpdb; $wpml_lang_code = (defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE: false); if( $wpml_lang_code ) { if(sizeof($excludes) > 0){ $excludes = " AND $wpdb->terms.term_id NOT IN (".implode(",", $excludes).")"; } else{ $excludes = ""; } $query = "select * from (select distinct($wpdb->terms.name), $wpdb->terms.term_id, $wpdb->term_taxonomy.taxonomy, $wpdb->term_taxonomy.term_taxonomy_id from $wpdb->terms, $wpdb->term_taxonomy where name like '%%%s%%' and $wpdb->term_taxonomy.taxonomy<>'link_category' and $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id $excludes limit 0, ".$limit.") as c, ".$wpdb->prefix."icl_translations as i where c.term_taxonomy_id = i.element_id and i.language_code = %s and SUBSTR(i.element_type, 1, 4)='tax_' group by c.term_id"; $query = $wpdb->prepare($query, $search, $wpml_lang_code); return $query; } return $query; } add_filter('sf_posts_query', 'TieLiveSearch_posts_query', 5, 10); function TieLiveSearch_posts_query($query, $search, $post_type, $excludes, $search_content, $order_results, $limit){ global $wpdb; $wpml_lang_code = (defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE: false); if( $wpml_lang_code ) { if(sizeof($excludes) > 0){ $excludes = " AND $wpdb->posts.ID NOT IN (".implode(",", $excludes).")"; } else{ $excludes = ""; } //$order_results = (!empty($order_results) ? " order by ".$order_results : ""); $query = $wpdb->prepare("select * from (select $wpdb->posts.ID from $wpdb->posts where (post_title like '%%%s%%' ".($search_content == true ? "or post_content like '%%%s%%')":")")." and post_status='publish' and post_type='".$post_type."' $excludes $order_results limit 0,".$limit.") as p, ".$wpdb->prefix."icl_translations as i where p.ID = i.element_id and i.language_code = %s group by p.ID", ($search_content == true ? array($search, $search, $wpml_lang_code): array($search, $wpml_lang_code))); return $query; } return $query; } $TieLiveSearch = new TieLiveSearch(); ?>
| ver. 1.4 |
Github
|
.
| PHP 7.4.3-4ubuntu2.28 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка