WooCommerce 产品简码按 sku 列表排序
WooCommerce products shortcode order by sku list
有没有办法修改 WooCommerce 产品短代码以按产品 sku 列表订购?
搜索引擎向包含 sku 列表的页面发送 Post。该页面应以与 http post 相同的顺序显示产品。
示例 php 和 mysql select(这样的代码在我可以使用 SQL 语法的旧商店系统中有效):
$_POST['skus'] = "51,57,34,12,111";
$skus = $_POST['skus'];
select * from products where sku in ('$skus') order by FIELD(sku,'$skus);
如何使用 woocommerce 的产品简码来实现 "orderby" 示例,或者有更好的方法使用 woocommerce 来做到这一点吗?
感谢您的每一个回答。
在 Gavin 的帮助下和 https://wordpress.stackexchange.com/a/67830/43362 的代码
我找到了这个解决方案:
function wpse67823_orderby_post_in($orderby, $query){
//Remove it so it doesn't effect future queries
remove_filter(current_filter(), __FUNCTION__);
$post__in = $_POST['skus'];
$post__in = str_replace(',','\',\'',$post__in);
return "FIELD(CAST(mt2.meta_value AS CHAR), '$post__in' )";
}
//Add filter and perform query
add_filter('posts_orderby','wpse67823_orderby_post_in',10,2);
echo do_shortcode('[products skus="'.$skus.'" orderby="sku"]');
remove_filter('posts_orderby','wpse67823_orderby_post_in',10,2);
有没有办法修改 WooCommerce 产品短代码以按产品 sku 列表订购?
搜索引擎向包含 sku 列表的页面发送 Post。该页面应以与 http post 相同的顺序显示产品。
示例 php 和 mysql select(这样的代码在我可以使用 SQL 语法的旧商店系统中有效):
$_POST['skus'] = "51,57,34,12,111";
$skus = $_POST['skus'];
select * from products where sku in ('$skus') order by FIELD(sku,'$skus);
如何使用 woocommerce 的产品简码来实现 "orderby" 示例,或者有更好的方法使用 woocommerce 来做到这一点吗?
感谢您的每一个回答。
在 Gavin 的帮助下和 https://wordpress.stackexchange.com/a/67830/43362 的代码 我找到了这个解决方案:
function wpse67823_orderby_post_in($orderby, $query){
//Remove it so it doesn't effect future queries
remove_filter(current_filter(), __FUNCTION__);
$post__in = $_POST['skus'];
$post__in = str_replace(',','\',\'',$post__in);
return "FIELD(CAST(mt2.meta_value AS CHAR), '$post__in' )";
}
//Add filter and perform query
add_filter('posts_orderby','wpse67823_orderby_post_in',10,2);
echo do_shortcode('[products skus="'.$skus.'" orderby="sku"]');
remove_filter('posts_orderby','wpse67823_orderby_post_in',10,2);