【发布时间】:2015-03-19 18:40:00
【问题描述】:
我想要做的是能够在 WooCommerce 订单管理页面中按订单商品 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'],但没有成功。
【问题讨论】:
-
我不明白。听起来您不确定 $search_sku->sku 或其他变体是否具有价值。你为什么不直接运行 print_r($search_sku);死();在您的 foreach 循环中查看它以确定您需要引用的对象属性或数组键?
-
查看 /woocommerce/includes/admin/class-wc-admin-post-types.php 中的函数 shop_order_search_custom_fields()(第 ~1284 行)。据我所知,那里的 SELECT 语句只搜索 wp_posts 和 wp_postmeta 表。 SKU 是特定于产品的。因此,您需要以某种方式在(和搜索)产品数据中构建自己的 UNION 查询。
-
澄清:...仅在 wp_posts 和 wp_postmeta 表中搜索帖子类型 shop_order。
-
select 语句确实会查找项目,但它会查找
wp_woocommerce_order_items表中的项目。 SKU 未保存在此表中,因此您必须将wp_woocommerce_order_itemmeta_product_id字段与wp_postmetapost_id字段合并,然后搜索_sku。您的WP_Query是否打算将 SKU 添加到订单项目表中?您应该能够将 SKU 添加为订单项元数据。 -
或者,如果您能找到正确的 SQL 查询,则可能值得向 WooCommerce 发送拉取请求,以便可能包含在内。
标签: php search woocommerce