admin管理员组文章数量:1335623
I try to find a way to get products ID by custom field in a category. I use this:
// Get the category
$catsearched = $atts['category_id'];
// Get all product of categoryselected
$product_args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids', // Only return product IDs
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => $catsearched,
'operator' => 'IN',
))
);
$products = get_posts($product_args);
//$products = implode(",", $products);
//return $products;
/**
* FIND ALL PRODUCT WITH SAME CIP AND KEEP ONLY ONE PRODUCT BY CIP (array_unique)
*
* ======================================================================================
*/
foreach ( $products as $id )
{
$cip = $product_obj['product_cip'] = get_post_meta($id,'product_cip');
$arrayCip[] = $cip[0];
}
//echo '<b>TotalNumberOfCIP = '.count($arrayCip).'</b><br>';
$result = array_unique($arrayCip);
//echo '<b>TotalNumberOfUniqueCIP = '.count($result).'</b><br>';
//$results = implode(",", $result);
//var_dump($results);
/**
* FIND ID BY CIP
*
**/
global $wpdb;
// Find product id by CIP
foreach($result as $cip)
{
$arrayid[] = $wpdb->get_var( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='product_cip' AND meta_value='.$cip.' AND {$wpdb->term_relationships}.term_taxonomy_id IN ($catsearched)");
}
All works fine before FIND ID BY CIP After $arrayid is null.
I also tried:
global $wpdb;
$meta = $wpdb->get_results( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %s AND {$wpdb->term_relationships}.term_taxonomy_id IN ($catsearched)", $key, $value ) );
//var_dump(($meta));
if (is_array($meta) && !empty($meta) && isset($meta[0])) {
$meta = $meta[0];
}
if (is_object($meta)) {
return $meta->post_id;
}
else {
return false;
}
But always bool(false)
Any idea ? Thanks
I try to find a way to get products ID by custom field in a category. I use this:
// Get the category
$catsearched = $atts['category_id'];
// Get all product of categoryselected
$product_args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids', // Only return product IDs
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => $catsearched,
'operator' => 'IN',
))
);
$products = get_posts($product_args);
//$products = implode(",", $products);
//return $products;
/**
* FIND ALL PRODUCT WITH SAME CIP AND KEEP ONLY ONE PRODUCT BY CIP (array_unique)
*
* ======================================================================================
*/
foreach ( $products as $id )
{
$cip = $product_obj['product_cip'] = get_post_meta($id,'product_cip');
$arrayCip[] = $cip[0];
}
//echo '<b>TotalNumberOfCIP = '.count($arrayCip).'</b><br>';
$result = array_unique($arrayCip);
//echo '<b>TotalNumberOfUniqueCIP = '.count($result).'</b><br>';
//$results = implode(",", $result);
//var_dump($results);
/**
* FIND ID BY CIP
*
**/
global $wpdb;
// Find product id by CIP
foreach($result as $cip)
{
$arrayid[] = $wpdb->get_var( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='product_cip' AND meta_value='.$cip.' AND {$wpdb->term_relationships}.term_taxonomy_id IN ($catsearched)");
}
All works fine before FIND ID BY CIP After $arrayid is null.
I also tried:
global $wpdb;
$meta = $wpdb->get_results( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %s AND {$wpdb->term_relationships}.term_taxonomy_id IN ($catsearched)", $key, $value ) );
//var_dump(($meta));
if (is_array($meta) && !empty($meta) && isset($meta[0])) {
$meta = $meta[0];
}
if (is_object($meta)) {
return $meta->post_id;
}
else {
return false;
}
But always bool(false)
Any idea ? Thanks
Share Improve this question asked Apr 14, 2018 at 18:15 ilanbilanb 933 silver badges12 bronze badges3 Answers
Reset to default 6$args = array(
'post_type' => 'product',
'meta_key' => 'YOUR_FIELD_ID',
'meta_value' => array('yes'), //'meta_value' => array('yes'),
'meta_compare' => 'IN' //'meta_compare' => 'NOT IN'
);
$products = wc_get_products($args);
foreach ($products as $product) {
//do your logic
}
Try This.
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_key' => 'ingredients', //Your Custom field name
'meta_value' => ' ', //Custom field value
'meta_compare' => '='
);
$the_query = new WP_Query( $args );
$count = $the_query->post_count;
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
endwhile;
endif;
Click here to see multipal custom field condition.
This may help; this function returns a list of product where a custom field is set to any value.
function get_wc_products_where_custom_field_is_set($field) {
$products = wc_get_products(array('status' => 'publish'));
foreach ($products as $product) {
$id = $product->get_id();
if (get_post_meta($id,$field,true)) /* if my custom field is set */
$ret[] = new \WC_Product($id);
}
return $ret;
}
Works fine unless you've got 1000s of products.....
本文标签: queryFind woocommerce product ID by custom field value
版权声明:本文标题:query - Find woocommerce product ID by custom field value? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742391719a2466121.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论