Sql WooCommerce产品按sku列表的快捷码订单

Sql WooCommerce产品按sku列表的快捷码订单,sql,wordpress,woocommerce,shortcode,product,Sql,Wordpress,Woocommerce,Shortcode,Product,是否有办法通过产品sku列表将WooCommerce产品短代码修改为订单 搜索引擎向页面发送包含sku列表的帖子。该页面应以与http post相同的顺序显示产品 示例php和mysql select(像这样的代码在我的旧商店系统中工作,在那里我可以使用SQL语法): 我如何使用woocommerce的产品快捷码来执行示例中的“orderby”,或者是否有更好的方法使用woocommerce来执行此操作 感谢您的每一个答案。在Gavin的帮助下以及 我找到了这个解决方案: functio

是否有办法通过产品sku列表将WooCommerce产品短代码修改为订单

搜索引擎向页面发送包含sku列表的帖子。该页面应以与http post相同的顺序显示产品

示例php和mysql select(像这样的代码在我的旧商店系统中工作,在那里我可以使用SQL语法):

我如何使用woocommerce的产品快捷码来执行示例中的“orderby”,或者是否有更好的方法使用woocommerce来执行此操作


感谢您的每一个答案。

在Gavin的帮助下以及 我找到了这个解决方案:

    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);

在Gavin的帮助下,代码来自 我找到了这个解决方案:

    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);

如果不进行测试,我无法100%确定,可能会将
字段(sku,$sku)
作为短代码中的
order
参数传递。i、 e.
[products skus=“foo,bar,baz”orderby=“FIELD(sku,'foo,bar,baz')”order=“asc”]
我已经试过了——不幸的是,它不起作用。我认为这可能是一个长期的尝试。我能想到的唯一替代方法是手动覆盖短代码结果,并根据提供的ID/SKU对结果进行排序。好的,谢谢Gavin。你有代码示例吗?只要您只匹配产品id而不是SKU,以上看起来是一个可行的解决方案。如果不进行测试,我无法100%确定,可能会将
字段(SKU,$SKU)
作为短代码中的
order
参数传递。i、 e.
[products skus=“foo,bar,baz”orderby=“FIELD(sku,'foo,bar,baz')”order=“asc”]
我已经试过了——不幸的是,它不起作用。我认为这可能是一个长期的尝试。我能想到的唯一替代方法是手动覆盖短代码结果,并根据提供的ID/SKU对结果进行排序。好的,谢谢Gavin。你有代码示例吗?只要您只匹配产品id而不匹配SKU,以上看起来是一个可行的解决方案。