php – 在WooCommerce Orders Admin页面中按订单商品SKU或ID搜索

我想要做的是能够在WooCommerce Orders Admin页面中按订单商品SKU或ID进行搜索.

到目前为止我已经找到/完成了什么,但没有成功的是在functions.php文件中的以下内容.

add_filter( 'woocommerce_shop_order_search_fields', 'woocommerce_shop_order_search_sku' );

function woocommerce_shop_order_search_sku( $search_fields ) {

    $args = array( 'post_type' => 'shop_order' );

    $orders = new WP_Query( $args );

    if ( $orders->have_posts() ) {
        while( $orders->have_posts() ) {
            $post = $orders->the_post();
            $order_id = get_the_ID();
            $order = new WC_Order( $order_id );
            $items = $order->get_items();
            foreach( $items as $item ) {
                $search_order_item_sku = wp_get_post_terms( $item['product_id'], 'search_sku' );
                foreach( $search_order_item_sku as $search_sku ) {
                    add_post_meta( $order_id, "_search_sku", $search_sku->sku );
                }
            }
        }
    };

    $search_fields[] = '_search_sku';

    return $search_fields;

}

我想这个问题是$search_sku在add_post_meta行的价值.

我也用get_sku(),$item [‘sku’]试了一下但没有运气.

解决方法:

您有关于将额外元数据保存到订单的正确想法.正如jbby和helgatheviking建议的那样,在woocommerce订单api中默认没有product_id或sku的内置postmeta.但是,您访问和保存元数据的方法并不完全正确. wp_get_post_terms将访问自定义分类信息,而不是元数据(使用get_post_meta).您将能够执行您尝试使用此过滤器执行的操作:

add_filter( 'woocommerce_shop_order_search_fields', function ($search_fields ) {
    $posts = get_posts(array('post_type' => 'shop_order'));

    foreach ($posts as $post) {
        $order_id = $post->ID;
        $order = new WC_Order($order_id);
        $items = $order->get_items();

        foreach($items as $item) {
            $product_id = $item['product_id'];
            $search_sku = get_post_meta($product_id, "_sku", true);
            add_post_meta($order_id, "_product_sku", $search_sku);
            add_post_meta($order_id, "_product_id", $product_id);
        }
    }

    return array_merge($search_fields, array('_product_sku', '_product_id'));
});

严格来说,您应该将对add_post_meta的调用移动到最初保存到数据库时运行的钩子中 – 这样可以防止在您搜索订单时不必要的工作.

上一篇:php – WooCommerce运费价格包含税


下一篇:php – 使用自定义信息和价格将产品添加到购物车