Search Attributes for WooCommerce is a WordPress Plugin that enables Product search form to look into Product Attribute Names.
E.g. as show in plugin screenshots, you can search products using color name.
Another useful example is, you can search products using Brand name if you have Brands assigned as attributes.
To use this plugin, please make sure that Woocommerce is installed and Activated.
Important Notes
The plugin may not effect in case you are using some other product search related plugin for woocommerce.
Choose your attributes carefully, because the more attributes you choose, the more it will effect on the search speed.
Contribute
If you want to fix a bug in the plugin or add new features, feel free to fork this github repo and follow the CONTRIBUTING.md file in the github repo for guidelines.
屏幕截图
安装
Go to your admin area and select Plugins -> Add new from the menu.
Search for “Search Attributes for WooCommerce”.
Click install.
Click activate. If woocommrce is not installed or activated then this plugin will also not activate.
常见问题
How do I use this plugin?
Go to WordPress “Admin > Woocommerce > Search Attributes for WooCommerce”.
Select the attributes you want the search form to look into, select status to “Enable” and click “Save Changes”.
Can I undo the changes I have made after deactivating or deleting the plugin?
Yes. if you disable or delete the plugin, the changes you made will be undone. Also if you change the Status in plugin settings to “Disabled”, it will not search for attributes.
Great plugin !
Very easy to configure and use.
Allows searching on hidden attributes of products. Exactly what i was looking for.
Long life to this plugin.
Great and straightforward plugin.
It does what I needed mostly so I just modified it a bit to exclude products where variation of the searched attribute is out of stock.
e.g. If I search for Medium in a shirt, the product must NOT show if medium of that product is out of stock.
function wsatt_brands_where( $where = '' ) {
global $wpdb;
$product_ids = get_in_stock_IDS();
if($product_ids != "")
$where .= " OR $wpdb->posts.ID IN (".get_in_stock_IDS().")";
return $where;
}
function get_in_stock_IDS() {
global $wpdb;
$parent_ids = array();
$wsatt_attributes = @get_option('wsatt_attributes');
if(is_array($wsatt_attributes) && count($wsatt_attributes)>0){
foreach($wsatt_attributes as $attribute){
$parent_id_objects = $wpdb->get_results("SELECT $wpdb->posts.ID
FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE $wpdb->posts.post_type = 'product'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->term_taxonomy.taxonomy = '$attribute'
AND $wpdb->terms.name LIKE '%".esc_attr( $_GET['s'] )."%'");
if(count($parent_id_objects) == 0) continue;
foreach($parent_id_objects as $parent_id_object) {
$children = get_option("_transient_wc_product_children_".$parent_id_object->ID);
if(is_array($children) && count($children['all']) > 0) {
$instock = $wpdb->get_var("SELECT s.meta_value as stock from $wpdb->postmeta LEFT JOIN $wpdb->postmeta as s ON s.post_id = $wpdb->postmeta.post_id AND s.meta_key = '_stock' WHERE $wpdb->postmeta.post_id IN (".implode(",", $children['all']).") AND $wpdb->postmeta.meta_key like '%".$attribute."' AND $wpdb->postmeta.meta_value LIKE '%".esc_attr( $_GET['s'] )."%' AND s.meta_value > 0");
if($instock != NULL) {
//Child is matched based on query string and stock is NOT zero so we add that parent id to be displayed
$parent_ids[] = $parent_id_object->ID;
}
}else {
$parent_ids[] = $parent_id_object->ID;
}
}
}
return implode(",", $parent_ids);
}
}