Chuyển WPC Brands sang brand mặc định trong WooCommerce

WPC Brands for WooCommerce là plugin dành cho WordPress được phát triển bởi WPClever, nhằm hỗ trợ quản lý thương hiệu sản phẩm trên các cửa hàng sử dụng WooCommerce.

Plugin này cho phép bạn dễ dàng thêm và quản lý các thương hiệu cho sản phẩm, giúp cải thiện trải nghiệm người dùng và tăng tính chuyên nghiệp cho cửa hàng trực tuyến của bạn.

Một số tính năng chính của WPC Brands for WooCommerce

Tạo trang riêng cho từng thương hiệu: Mỗi thương hiệu sẽ có một landing page riêng với logo, banner, mô tả, và danh sách sản phẩm liên quan.

Gán sản phẩm vào thương hiệu: Bạn có thể gán một hoặc nhiều thương hiệu cho mỗi sản phẩm thông qua widget trên trang sản phẩm hoặc chỉnh sửa nhanh (Quick Edit).

Hiển thị thương hiệu linh hoạt: Plugin hỗ trợ hiển thị logo thương hiệu ở nhiều vị trí trên trang sản phẩm hoặc kho lưu trữ cửa hàng (shop archives), đồng thời có thể tùy chỉnh kiểu hiển thị.

Không giới hạn số lượng thương hiệu: Bạn có thể tạo bao nhiêu thương hiệu tùy ý với đầy đủ thông tin như logo, banner, và mô tả.

Tương thích tốt: Plugin hoạt động mượt mà với hầu hết các theme WordPress phổ biến và các tiện ích mở rộng của WooCommerce.

Lợi ích:

Plugin này rất hữu ích cho các cửa hàng muốn tổ chức sản phẩm theo thương hiệu, giúp khách hàng dễ dàng tìm kiếm và khám phá các sản phẩm từ thương hiệu yêu thích của họ. Nó cũng hỗ trợ chiến lược tiếp thị và tăng khả năng hiển thị thương hiệu.

Tuy nhiên từ khi WooCommerce 9.6 tích hợp sẵn tính năng Brands thì plugin này hầu như không có nhiều ý nghĩa, và nhiều khách hàng bên mình được hỗ trợ chuyển từ WPC Brands sang brand mặc định trong WooCommerce nên đây là bài hướng dẫn cho những ai cần chuyển đổi.

Code chuyển WPC Brands sang brand mặc định trong WooCommerce

Code chuyển toàn bộ taxonomy từ wpc-brand sang product_brand trong WordPress/WooCommerce.

  • Bước 1: Bạn thêm code dưới đây vào cuối file
  • Bước 2: Sau khi thêm code, bạn sẽ thấy một menu mới trong WordPress Admin tại Tools > Migrate Brand Taxonomy
  • Bước 3: Nhấn nút “Start Migration” để bắt đầu chuyển các terms
  • Bước 4: Bạn hãy kiểm tra lại các terms trong product_brand để đảm bảo dữ liệu đã được chuyển đúng
  • Bước 5: Nếu mọi thứ OK, bạn có thể nhấn “Clean Up Old Terms” để xóa các terms cũ trong wpc-brand sau đó xoá plugin WPC Brands for WooCommerce là xong

Code này sẽ:

– Chuyển tất cả terms từ wpc-brand sang product_brand
– Giữ nguyên slug, description và metadata của terms
– Cập nhật lại relations giữa products và terms mới
– Có tùy chọn để xóa terms cũ sau khi đã di chuyển xong

Lưu ý quan trọng:

– Hãy backup database trước khi thực hiện
– Kiểm tra kỹ các terms đã được chuyển đúng trước khi xóa terms cũ
– Nếu có nhiều products, quá trình có thể mất thời gian

Bạn có thể dùng code dưới hoặc xem code trên Github

function migrate_wpc_brand_to_product_brand() {
    // Get all terms from wpc-brand
    $wpc_terms = get_terms(array(
        'taxonomy' => 'wpc-brand',
        'hide_empty' => false
    ));

    if (!is_wp_error($wpc_terms)) {
        foreach ($wpc_terms as $term) {
            // Check if term already exists in product_brand
            $existing_term = term_exists($term->name, 'product_brand');
            
            if (!$existing_term) {
                // Insert term into product_brand
                $new_term = wp_insert_term(
                    $term->name,
                    'product_brand',
                    array(
                        'description' => $term->description,
                        'slug' => $term->slug
                    )
                );

                if (!is_wp_error($new_term)) {
                    // Get all products with this wpc-brand term
                    $products = get_posts(array(
                        'post_type' => 'product',
                        'numberposts' => -1,
                        'tax_query' => array(
                            array(
                                'taxonomy' => 'wpc-brand',
                                'field' => 'term_id',
                                'terms' => $term->term_id
                            )
                        )
                    ));

                    // Assign products to new product_brand term
                    foreach ($products as $product) {
                        wp_set_object_terms($product->ID, $new_term['term_id'], 'product_brand', true);
                    }

                    // Copy term meta if any exists
                    $term_meta = get_term_meta($term->term_id);
                    if ($term_meta) {
                        foreach ($term_meta as $meta_key => $meta_values) {
                            foreach ($meta_values as $meta_value) {
                                add_term_meta($new_term['term_id'], $meta_key, $meta_value);
                            }
                        }
                    }
                }
            }
        }
    }
}

// Function to clean up old taxonomy terms (optional)
function cleanup_wpc_brand_terms() {
    $wpc_terms = get_terms(array(
        'taxonomy' => 'wpc-brand',
        'hide_empty' => false
    ));

    if (!is_wp_error($wpc_terms)) {
        foreach ($wpc_terms as $term) {
            wp_delete_term($term->term_id, 'wpc-brand');
        }
    }
}

// Add admin menu item to trigger the migration
add_action('admin_menu', 'add_brand_migration_menu');

function add_brand_migration_menu() {
    add_submenu_page(
        'tools.php',
        'Migrate Brand Taxonomy',
        'Migrate Brand Taxonomy',
        'manage_options',
        'migrate-brand-taxonomy',
        'brand_migration_page'
    );
}

function brand_migration_page() {
    if (isset($_POST['migrate_brands'])) {
        migrate_wpc_brand_to_product_brand();
        echo '<div class="notice notice-success"><p>Migration completed successfully!</p></div>';
    }

    if (isset($_POST['cleanup_old_terms'])) {
        cleanup_wpc_brand_terms();
        echo '<div class="notice notice-success"><p>Old terms cleaned up successfully!</p></div>';
    }
    ?>
    <div class="wrap">
        <h1>Migrate Brand Taxonomy</h1>
        <form method="post">
            <?php wp_nonce_field('migrate_brands_action', 'migrate_brands_nonce'); ?>
            <p>Click below to migrate terms from wpc-brand to product_brand:</p>
            <input type="submit" name="migrate_brands" class="button button-primary" value="Start Migration">
            <p>After confirming the migration worked, you can clean up old terms:</p>
            <input type="submit" name="cleanup_old_terms" class="button button-secondary" value="Clean Up Old Terms">
        </form>
    </div>
    <?php
}

Code trên mình áp dụng cho hầu hết các dự án mà chưa gặp vấn đề gì, hy vọng code trên sẽ giúp ích được cho nhiều người.

5/5 - (27 votes)

donate Nếu bạn thấy bài viết có ích bạn có thể donate cho team hoặc chia sẻ bài viết này. Ngoài ra bạn có thể yêu cầu thêm bài viết tại đây
vutruso

Vũ Trụ Số chuyên cung cấp hosting cho WordPress, dịch vụ thiết kế website, quản trị website cho doanh nghiệp, dịch vụ quảng cáo Google, quảng cáo Facebook, các dịch vụ bảo mật website WordPress, tăng tốc website WordPress

Bài viết liên quan