Php 基于常规价格值禁用商业产品

Php 基于常规价格值禁用商业产品,php,wordpress,woocommerce,visibility,product,Php,Wordpress,Woocommerce,Visibility,Product,在我的Woocommerce网站上,我有一个插件,它有时会将产品价格更改为常规价格=null(出于不同的原因) 当这种情况发生时,我们希望禁用该产品,使其不会显示在我们的在线商店中。我们如何在functions.php中做到这一点?当常规价格为NULL时,此代码将禁用目录和搜索中的产品,当常规价格不再为NULL时,将重新启用禁用的产品: add_action( 'init', 'action_on_product_reg_price' ); function action_on_product_

在我的Woocommerce网站上,我有一个插件,它有时会将产品价格更改为常规价格=null(出于不同的原因)


当这种情况发生时,我们希望禁用该产品,使其不会显示在我们的在线商店中。我们如何在functions.php中做到这一点?

当常规价格为
NULL
时,此代码将禁用目录和搜索中的产品,当常规价格不再为
NULL
时,将重新启用禁用的产品:

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 );
            }
        }
    }
}
代码位于活动子主题(或主题)的function.php文件或任何插件文件中

在WooCommerce 3上测试并工作+