Dieser Code wird Produkte aus dem Katalog und Suche deaktivieren, wenn regulärer Preis NULL
ist und die deaktivierten Produkte, wenn regulärer Preis ist nicht NULL
mehr wieder aktivieren:
add_action('init', 'action_on_product_reg_price');
function action_on_product_reg_price(){
global $wpdb;
// First query: Get the product Ids that have a NULL regular price
$product_ids = $wpdb->get_col("
SELECT DISTINCT pm.post_id as product_id
FROM {$wpdb->prefix}postmeta as pm
LEFT JOIN {$wpdb->prefix}postmeta AS pm2 ON pm2.post_id = pm.post_id
WHERE (pm.meta_key = '_regular_price'
AND (pm.meta_value IS NULL
OR pm.meta_value LIKE 'null'))
OR (pm2.meta_key LIKE '_force_visibility'
AND pm2.meta_value IS NOT NULL)
");
// Disable the products from catalog and search
if(count($product_ids) > 0){
foreach($product_ids as $product_id){
$product = wc_get_product($product_id);
if($product->get_catalog_visibility() != 'hidden') {
$product->set_catalog_visibility('hidden'); // visible
$product->save();
update_post_meta($product_id, '_force_visibility', 1);
}
}
}
// 2nd query: Get the product Ids that have changed from NULL regular price
$product_ids = $wpdb->get_col("
SELECT DISTINCT pm.post_id as product_id
FROM {$wpdb->prefix}postmeta as pm
INNER JOIN {$wpdb->prefix}postmeta AS pm2 ON pm2.post_id = pm.post_id
WHERE pm.meta_key = '_regular_price'
AND (pm.meta_value IS NOT NULL
OR pm.meta_value NOT LIKE 'null')
AND pm2.meta_key LIKE '_force_visibility'
AND pm2.meta_value = '1'
");
// Re-enable catolog and search visibility
if(count($product_ids) > 0){
foreach($product_ids as $product_id){
$product = wc_get_product($product_id);
if($product->get_catalog_visibility() != 'visible') {
$product->set_catalog_visibility('visible'); // visible
$product->save();
update_post_meta($product_id, '_force_visibility', NULL);
}
}
}
}
-Code geht in Funktion. PHP-Datei Ihres aktiven untergeordneten Themas (oder Themas) oder auch in einer beliebigen Plugin-Datei.
Getestet und funktioniert auf WooCommerce 3+