wpdokan 0 ارسال شده در خرداد 01 گزارش بازنشر ارسال شده در خرداد 01 سلام. دوستان یه افزونه ساده هست که جست و جوی آجاکس برای محصولات ووکامرس انجام میده. می خوام این افزونه تبدیل بشه به جست و جوی آجاکس برای edd. من تغییرات لازم رو انجام دادم، اما موقع جست و جو، همه محصولات رو نشون میده و محصولات مرتبط با جست و جو رو فیلتر نمی کنه. من افزونه اصلی رو ضمیمه می کنم. اگر کسی میتونه، یه نگاه بندازه و تغییرات لازم رو برام انجام بده. فکر نکنم بیشتر از 5 دقیقه زمان ببره. تشکر product-search.zip لینک به ارسال
wpdokan 0 ارسال شده در خرداد 01 مالک گزارش بازنشر ارسال شده در خرداد 01 تغییرات من به این صورت بوده <?php /* Plugin Name: Woocommerce AJAX product search Plugin URI: http://www.enovathemes.com Description: Ajax product search for WooCommerce Author: Enovathemes Version: 1.0 Author URI: http://enovathemes.com */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } function search_plugin_scripts_styles(){ if (class_exists("Easy_Digital_Downloads")) { wp_enqueue_style( 'search-style', plugins_url('/css/style.css', __FILE__ ), array(), '1.0.0' ); wp_register_script( 'search-main', plugins_url('/js/main.js', __FILE__ ), array('jquery'), '', true); wp_localize_script( 'search-main', 'opt', array( 'ajaxUrl' => admin_url('admin-ajax.php'), 'noResults' => esc_html__( 'No products found', 'textdomain' ), ) ); } } add_action( 'wp_enqueue_scripts', 'search_plugin_scripts_styles' ); /* Get taxonomy hierarchy /*-------------------*/ function get_taxonomy_hierarchy( $taxonomy, $parent = 0, $exclude = 0) { $taxonomy = is_array( $taxonomy ) ? array_shift( $taxonomy ) : $taxonomy; $terms = get_terms( $taxonomy, array( 'parent' => $parent, 'hide_empty' => false, 'exclude' => $exclude) ); $children = array(); foreach ( $terms as $term ){ $term->children = get_taxonomy_hierarchy( $taxonomy, $term->term_id, $exclude); $children[ $term->term_id ] = $term; } return $children; } /* List taxonomy hierarchy /*-------------------*/ function list_taxonomy_hierarchy_no_instance( $taxonomies) { ?> <?php foreach ( $taxonomies as $taxonomy ) { ?> <?php $children = $taxonomy->children; ?> <option value="<?php echo $taxonomy->term_id; ?>"><?php echo $taxonomy->name; ?></option> <?php if (is_array($children) && !empty($children)): ?> <optgroup> <?php list_taxonomy_hierarchy_no_instance($children); ?> </optgroup> <?php endif ?> <?php } ?> <?php } /* Product categories transient /*-------------------*/ function get_product_categories_hierarchy() { if ( false === ( $categories = get_transient( 'product-categories-hierarchy' ) ) ) { $categories = get_taxonomy_hierarchy( 'download_category', 0, 0); // do not set an empty transient - should help catch private or empty accounts. if ( ! empty( $categories ) ) { $categories = base64_encode( serialize( $categories ) ); set_transient( 'product-categories-hierarchy', $categories, apply_filters( 'null_categories_cache_time', 0 ) ); } } if ( ! empty( $categories ) ) { return unserialize( base64_decode( $categories ) ); } else { return new WP_Error( 'no_categories', esc_html__( 'No categories.', 'textdomain' ) ); } } /* Delete product categories transient /*-------------------*/ function edit_product_term($term_id, $tt_id, $taxonomy) { $term = get_term($term_id,$taxonomy); if (!is_wp_error($term) && is_object($term)) { $taxonomy = $term->taxonomy; if ($taxonomy == "download_category") { delete_transient( 'product-categories-hierarchy' ); } } } function delete_product_term($term_id, $tt_id, $taxonomy, $deleted_term) { if (!is_wp_error($deleted_term) && is_object($deleted_term)) { $taxonomy = $deleted_term->taxonomy; if ($taxonomy == "download_category") { delete_transient( 'product-categories-hierarchy' ); } } } add_action( 'create_term', 'edit_product_term', 99, 3 ); add_action( 'edit_term', 'edit_product_term', 99, 3 ); add_action( 'delete_term', 'delete_product_term', 99, 4 ); add_action( 'save_post', 'save_post_action', 99, 3); function save_post_action( $post_id ){ if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if (!current_user_can( 'edit_page', $post_id ) ) return; $post_info = get_post($post_id); if (!is_wp_error($post_info) && is_object($post_info)) { $content = $post_info->post_content; $post_type = $post_info->post_type; if ($post_type == "download"){ delete_transient( 'enovathemes-product-categories' ); } } } /* Search action /*-------------------*/ function search_product() { global $wpdb; if (isset($_POST['keyword']) && !empty($_POST['keyword'])) { $keyword = $_POST['keyword']; if (isset($_POST['category']) && !empty($_POST['category'])) { $category = $_POST['category']; $querystr = "SELECT DISTINCT * FROM $wpdb->posts AS p LEFT JOIN $wpdb->term_relationships AS r ON (p.ID = r.object_id) INNER JOIN $wpdb->term_taxonomy AS x ON (r.term_taxonomy_id = x.term_taxonomy_id) INNER JOIN $wpdb->terms AS t ON (r.term_taxonomy_id = t.term_id) WHERE p.post_type IN ('download') AND p.post_status = 'publish' AND x.taxonomy = 'download_category' ORDER BY t.name ASC, p.post_date DESC;"; } else { $querystr = "SELECT DISTINCT $wpdb->posts.* FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND ( ($wpdb->posts.post_content LIKE '%{$keyword}%') OR ($wpdb->posts.post_title LIKE '%{$keyword}%') ) AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'download' ORDER BY $wpdb->posts.post_date DESC"; } $query_results = $wpdb->get_results($querystr); if (!empty($query_results)) { $output = ''; foreach ($query_results as $result) { $categories = wp_get_post_terms($result->ID, 'download_category'); $output .= '<li>'; $output .= '<a href="'.get_post_permalink($result->ID).'">'; $output .= '<div class="product-image">'; $output .= '<img src="'.esc_url(get_the_post_thumbnail_url($result->ID,'thumbnail')).'">'; $output .= '</div>'; $output .= '<div class="product-data">'; $output .= '<h3>'.$result->post_title.'</h3>'; if (!empty($categories)) { $output .= '<div class="product-categories">'; foreach ($categories as $category) { if ($category->parent) { $parent = get_term_by('id',$category->parent,'download_category'); $output .= '<span>'.$parent->name.'</span>'; } $output .= '<span>'.$category->name.'</span>'; } $output .= '</div>'; } $output .= '</div>'; $output .= '</a>'; $output .= '</li>'; } if (!empty($output)) { echo $output; } } } die(); } add_action( 'wp_ajax_search_product', 'search_product' ); add_action( 'wp_ajax_nopriv_search_product', 'search_product' ); /* Widget /*-------------------*/ add_action('widgets_init', 'register_product_search_widget'); function register_product_search_widget(){ register_widget( 'Enovathemes_Addons_WP_Product_Search' ); } class Enovathemes_Addons_WP_Product_Search extends WP_Widget { public function __construct() { parent::__construct( 'product_search_widget', esc_html__('* Product ajax search', 'textdomain'), array( 'description' => esc_html__('Product ajax search', 'textdomain')) ); } public function widget( $args, $instance) { wp_enqueue_script('search-main'); extract($args); $title = apply_filters( 'widget_title', $instance['title'] ); echo $before_widget; if ( ! empty( $title ) ){echo $before_title . $title . $after_title;} ?> <div class="product-search"> <form name="product-search" method="POST"> <?php $categories = get_product_categories_hierarchy(); ?> <?php if ($categories): ?> <select name="category" class="category"> <option class="default" value=""><?php echo esc_html__( 'Select a category', 'textdomain' ); ?></option> <?php list_taxonomy_hierarchy_no_instance( $categories); ?> </select> <?php endif ?> <div class="search-wrapper"> <input type="search" name="search" class="search" placeholder="<?php echo esc_html__( 'Search for product...', 'textdomain' ); ?>" value=""> <?php echo file_get_contents(plugins_url( 'images/loading.svg', __FILE__ )); ?> </div> </form> <div class="search-results"></div> </div> <?php echo $after_widget; } public function form( $instance ) { $defaults = array( 'title' => esc_html__('Product search', 'textdomain'), ); $instance = wp_parse_args((array) $instance, $defaults); ?> <div id="<?php echo esc_attr($this->get_field_id( 'widget_id' )); ?>"> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php echo esc_html__( 'Title:', 'textdomain' ); ?></label> <input class="widefat <?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> </div> <?php } public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = strip_tags( $new_instance['title'] ); return $instance; } } ?> لینک به ارسال
پست های پیشنهاد شده
لطفا برای ارسال دیدگاه وارد شوید
شما بعد از اینکه وارد حساب کاربری خود شدید می توانید دیدگاهی ارسال کنید
ورود به حساب کاربری