我试图使用Search by order item SKU or ID in Woocommerce Orders Admin page中的以下代码来启用天空和id搜索woocommerce订单,sku对我来说是重要的部分。
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", $sku);
add_post_meta($order_id, "_product_id", $product_id);
}
}
return array_merge($search_fields, array('_product_sku', '_product_id'));
});
当我将它添加到我的functions.php时,我收到以下错误:
Array() expects parameter 1 to be a valid callback, function 'woocommerce_shop_order_search_order_total' not found or invalid function name in /var/sites/s/silverfx.co.uk/public_html/wp-includes/plugin.php on line 235
Warning: array_merge(): Argument #1 is not an array in /var/sites/s/silverfx.co.uk/public_html/wp-content/themes/SilverFx-Theme/functions.php on line 156
Warning: array_map(): Argument #2 should be an array in /var/sites/s/silverfx.co.uk/public_html/wp-content/plugins/woocommerce/includes/admin/class-wc-admin-post-types.php on line 1533
Warning: array_map(): Argument #2 should be an array in /var/sites/s/silverfx.co.uk/public_html/wp-content/plugins/woocommerce/includes/admin/class-wc-admin-post-types.php on line 1557
Warning: implode(): Invalid arguments passed in /var/sites/s/silverfx.co.uk/public_html/wp-content/plugins/woocommerce/includes/admin/class-wc-admin-post-types.php on line 1557
我假设由于这是大约1岁,而且woocommerce在那段时间经历了一些重大变化,这段代码需要更新,但是我没有足够的经验与woocommerce认识到什么是错的。
如果任何人只能确认我在正确的道路上或提供指导/建议我可能需要做什么就会很棒。
谢谢
答案 0 :(得分:1)
已更新:与WooCommerce 3 +的兼容性
虽然woocommerce_shop_order_search_fields
过滤器钩子扩展了后端订单列表中的搜索,但您需要为基于id或sku的订单项搜索添加一些post_meta字段。
作者在产品sku add_post_meta()
中犯了一个错误。您需要使用 $sku
替换未定义的 $search_sku
变量,我认为。
更新:经过一些思考和一些搜索此代码片段中使用的wordpress函数后,我想我已经得到了解决方案。
以下是与to add_post_meta() function问题相关的更新代码:
add_filter( 'woocommerce_shop_order_search_fields', function ($search_fields ) {
$orders = get_posts( array( 'post_type' => 'shop_order' ) );
foreach ($orders as $order_post) {
$order_id = $order_post->ID;
$order = new WC_Order($order_id);
$items = $order->get_items();
foreach( $order->get_items() as $item_id => $item_values ) {
if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
$product_id = $item_values['product_id'];
} else {
$product_id = $item_values->get_product_id();
}
$search_sku = get_post_meta($product_id, "_sku", true);
add_post_meta($order_id, "_product_id", $product_id, true); // <= ## Here ##
add_post_meta($order_id, "_product_sku", $search_sku, true); // <= ## Here ##
}
}
return array_merge($search_fields, array('_product_id', '_product_sku'));
} );
当设置为true
时,缺少可选参数,指定值不是数组。
现在应该可以了。
参考:
答案 1 :(得分:0)
您可以在搜索结果过滤器中进行附加查询。该代码还将搜索产品元数据,例如属性等。
Relation