You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过标题筛选删除指定WooCommerce产品变体?代码功能验证求助

How to Delete WooCommerce Product Variations by Title Phrases

Let’s start by breaking down the issues in your current code that are keeping it from working as intended, then fix it to properly target and delete unwanted variations based on their title content:

  1. Undefined $variation_id: In the variable product block, you’re trying to create a WC_Product_Variation object with $variation_id, but this variable is never defined—this will throw an error right away.
  2. No iteration over variations: Your code doesn’t loop through all variations of a variable product; it only attempts to create a single variation object without any logic to go through every variant.
  3. Redundant database query: Querying the wp_terms table to get the variation name is unnecessary—you can fetch the variation’s title or attributes directly using WooCommerce’s built-in methods.
  4. Incorrect title retrieval: Using current($variation->get_variation_attributes()) only grabs one attribute value, not the full variation title you need to check.

Fixed Code Implementation

Here’s the revised code that will properly loop through all variations, check their title content, and delete the ones matching your criteria:

case 'trash_unwanted_products':
    $args = array(
        'post_type' => array('product','product_variation'),
        'post_status' => array('publish','draft'),
        'no_found_rows' => true,
        'ignore_sticky_posts' => true,
        'fields' => 'ids',
        'posts_per_page' => -1,
        'orderby' => 'name',
        'order' => 'asc',
    );
break;

private function trash_unwanted_products($product) {
    if (!$product->exists()) {
        return false;
    }

    // Handle simple/variable parent products first
    $productName_slug = sanitize_title($product->get_name());
    if (strpos($productName_slug,'ubrus')!==false && strpos($productName_slug,'vanocni')!==false) {
        $this->trash_product($product);
        return; // Exit early if parent product is trashed
    }

    // Process variations for variable products
    if ($product->is_type('variable')) {
        // Get all active variations of the parent product
        $variations = $product->get_available_variations();

        foreach ($variations as $variation_data) {
            $variation = wc_get_product($variation_data['variation_id']);
            if (!$variation || !$variation->exists()) {
                continue;
            }

            // Get the full variation title (e.g., "Parent Product - Color: Blue - Size: Large")
            $variation_title = $variation->get_name();
            $variationName_slug = sanitize_title($variation_title);
            $variationName_dash = sanitize_title_with_dashes($variation_title);

            // Check your deletion criteria
            if (strpos($variationName_slug,'latka')!==false && strpos($variationName_dash,'cena-za-1-bezny-metr')!==false) {
                // Use WooCommerce's native function for safer variation deletion
                wc_delete_product($variation->get_id(), true);
                // Alternative: wp_delete_post($variation->get_id(), true);
            }
        }
    }
}

private function trash_product($product) {
    wp_delete_post($product->get_id(), true);
}

Key Improvements Explained

  • Full variation loop: $product->get_available_variations() fetches all active variations for the variable product, and we use a foreach loop to iterate over each one.
  • Proper variation instantiation: wc_get_product($variation_data['variation_id']) is the recommended WooCommerce method to retrieve a variation object reliably.
  • Direct title access: $variation->get_name() returns the complete variation title, which we can sanitize and check against your target phrases directly.
  • Safer deletion: wc_delete_product() handles WooCommerce-specific clean-up tasks (like removing related metadata) that wp_delete_post() might miss, making it more robust for product variations.

Additional Tips

  • If you only need to target variations (not parent products), adjust your $args to only include 'product_variation' as the post type to reduce unnecessary processing.
  • For better performance, consider adding a title parameter to your $args to pre-filter variations before processing, instead of checking every single variant in code.
  • Always test this code on a staging site first to avoid accidental data loss!

内容的提问来源于stack exchange,提问作者Zdenda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:18:24