1 回答
TA贡献1862条经验 获得超6个赞
您无法真正在产品查询中定位分组产品中的子产品,因为数据作为序列化数组存储_children在表上的 meta_key下。wp_post_meta
但您可以做的是首先向分组产品中的所有子产品添加自定义字段。然后您将能够使用该自定义字段来更改产品查询。
以下函数将完成该工作,并且您只需运行它一次:
function add_a_custom_field_to_grouped_children_products() {
// get all grouped products Ids
$grouped_ids = wc_get_products( array( 'limit' => -1, 'type' => 'grouped', 'return' =>'ids' ) );
// Loop through grouped products
foreach( $grouped_ids as $grouped_id ){
// Get the children products ids
$children_ids = (array) get_post_meta( $grouped_id, '_children', true );
// Loop through children product Ids
foreach( $children_ids as $child_id ) {
// add a specific custom field to each child with the parent grouped product id
update_post_meta( $child_id, '_child_of', $grouped_id );
}
}
}
add_a_custom_field_to_grouped_children_products(); // Run the function
代码位于活动子主题(或活动主题)的functions.php 文件中。
保存后,浏览您网站的任何页面。然后删除该代码并保存。
现在,所有分组的儿童产品都将有一个自定义字段。如果您添加/创建更多分组产品,您将需要以下函数来将该自定义字段添加到子产品中:
// Add on the children products from a grouped product a custom field
add_action( 'woocommerce_process_product_meta_grouped', 'wc_action_process_children_product_meta' );
function wc_action_process_children_product_meta( $post_id ) {
// Get the children products ids
$children_ids = (array) get_post_meta( $post_id, '_children', true );
// Loop through children product Ids
foreach( $children_ids as $child_id ) {
// add a specific custom field to each child with the parent grouped product id
update_post_meta( $child_id, '_child_of', $post_id );
}
}
代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。
现在完成,将隐藏所有产品的函数循环分组产品中的子产品:
add_filter( 'woocommerce_product_query_meta_query', 'hide_children_from_grouped_products' );
function hide_children_from_grouped_products( $meta_query ) {
if( ! is_admin() ) {
$meta_query[] = array(
'key' => '_child_of',
'compare' => 'NOT EXISTS'
);
}
return $meta_query;
}
代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。
- 1 回答
- 0 关注
- 112 浏览
添加回答
举报