【问题标题】:Woocommerce SKU Generator: Generate a sku for all variations same as parent skuWoocommerce SKU 生成器:为与父 sku 相同的所有变体生成 sku
【发布时间】:2017-12-23 19:33:02
【问题描述】:

我需要一个简单的函数,允许我使用产品的父 sku 添加或替换我已发布产品中的空 sku 代码。

有没有办法获得这个作品?

【问题讨论】:

  • 我禁用了独特的 sku!我需要它来制作函数 wp lister...事实上我使用 sku 作为 ean,所以所有变体上的 sku 都由 ebay 上的 wp-lister 作为 ean 变量产品导入
  • 我找到了这个stackoverflow.com/questions/28670292/…,但我只需要变化,所有 sku 都已经收费了

标签: php wordpress woocommerce product sku


【解决方案1】:

更新:要将已发布产品中的空 SKU 代码替换为父 SKU(可变产品 SKU),请尝试仅为管理员用户角色工作

在运行之前做一个数据库备份

要运行此功能,请浏览您的商店页面

  • 每次更新 2500 个空变体 SKU。
  • 一条消息将显示更新变体的计数。
  • 每次您都需要重新加载页面以处理 2000 个变体 SKU。

当所有变体 SKU 都将更新时,会显示一条消息让您知道工作已完成。

代码:

add_action('woocommerce_before_main_content', 'update_variations_sku', 100 );
function update_variations_sku(){
    global $wpdb;
    $results = $results2 = array();
    $limit = 2500; // Number of variations to process

    // The SQL query (get the variations with empty sku and their parent product ID)
    $query = $wpdb->get_results( "
        SELECT p.ID, p.post_parent
        FROM {$wpdb->prefix}posts as p
        INNER JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
        WHERE p.post_type LIKE 'product_variation'
        AND p.post_status LIKE 'publish'
        AND pm.meta_key LIKE '_sku'
        LIMIT $limit
    " );

    if( count($query) == 0 ){
        echo "<p><pre>The job is finished, you can remove the code</pre></p>";
        return; // exit
    }

    // Loop through variation Ids and get the parent variable product ID
    foreach( $query as $value )
        $results[$value->post_parent][] = $value->ID;

    // Loop through variation Ids and set the parent sku in related empty variations skus
    foreach($results as $parent_id => $variation_ids){
        $parent_sku = get_post_meta( $parent_id, '_sku', true );
        $count = 0;
        foreach($variation_ids as $variation_id){
            $count++;
            update_post_meta( $variation_id, '_sku', $parent_sku.'-'.$count );

        }
    }
    if( count($query) < $limit ){
        echo "<p><pre>The job is finished, you can remove the code <br>$count variations SKUs have been updated</pre></p>";
    } else {
        echo "<p><pre>$count variations SKUs have been updated (continue reloading the page again)</pre></p>";
    }
}

代码进入您的活动子主题(或主题)的 function.php 文件中。

经过测试并且有效。

【讨论】:

  • 当我放入我的functions.php文件站点返回错误500
  • ps 我的网站有 30.000 种产品,每种产品有 5 种变体...也许这是个问题?
  • 一个可能的解决方案?
  • 也许我发现了问题!
  • 如果(!current_user_can('edit_products'))返回;已删除...并且错误 500 已删除...现在可以使用!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 2019-11-06
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多