如您所知,woocommerce根据其标签和类别过滤相关产品。正因为如此,在一个拥有如此多产品的大型购物网站中,大多数时候,与主要产品相比,它显示出无关的相关产品。
我想改变它的工作原理。我的意思是我想根据主要产品的名称展示相关产品。我的所有类似产品都有相同的名称,但颜色除外。因此,如果我可以添加一个黑客代码来根据名称过滤相关产品,那么它会更有用。
示例:假设我的产品名称为“Ascis Gel Cumulus 15 Men Black”,如果我有一个代码来根据完全相似的单词过滤产品,那就太棒了。
--->如果他们有6个相似的确切单词,则显示为相关产品。如果没有,显示产品有5个相似的单词,如果没有显示产品有4个相似的单词等等...
如果你们能帮助我,我真的很感激。
P.s:我想这个网站会根据名字对它们进行排序。
http://www.barcin.com/nike-air-max-2014-spor-ayakkabi-621077-009
答案 0 :(得分:0)
正因为如此,在一个拥有如此多产品的大型购物网站中,大多数时候,与主要产品相比,它显示出无关的相关产品。
我不完全同意这一说法。如果“Ascis Gel Cumulus 15 Men Black”和“Ascis Gel Domain 15 Men Black”都属于Asics类别,那么它们将是相关的。他们可以将Gel Cumulus和Gel Domain作为子类别或标签。我不知道,但令我感到震惊的是,如果你有效地对事物进行分类和标记,你将获得更好的相关产品。我想你也可以用以下建议添加自定义属性。
那就是说,我相信可以调整相关产品的查询方式。但是,这不是一件容易的事,因为我在SQL方面不太好,所以我只能提供部分答案。如果您查看single-product/related.php
模板,您会看到
$related = $product->get_related( $posts_per_page );
您可以将get_related()
函数追溯到产品类中
abstract-wc-product.php
。
查看get_related()
它会设置高级SQL查询,但您可以通过woocommerce_product_related_posts_query
过滤器过滤查询子句。
add_filter( 'woocommerce_product_related_posts_query'. so_26246618_product_related_posts_query', 10, 2 );
function so_26246618_product_related_posts_query( $query, $product ){
global $wpdb;
$query['join'] = // write a new join clause;
$query['where'] = // write a new where clause
return $query;
}
或者,如果woocommerce_product_related_posts_relate_by_category
过滤器为true,则查询将按产品类别关联产品。同样,如果woocommerce_product_related_posts_relate_by_tag
过滤器设置为true,则查询将按标签关联产品。默认情况下,这两个都设置为true。您可以同时禁用它们,但是我不知道除了编写自己的自定义SQL之外,您还要做的不仅仅是查询最新的产品。