Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save webantam43/d3707e7d3c13f587137b62c8ee73df75 to your computer and use it in GitHub Desktop.

Select an option

Save webantam43/d3707e7d3c13f587137b62c8ee73df75 to your computer and use it in GitHub Desktop.

Revisions

  1. webantam43 created this gist Apr 5, 2025.
    151 changes: 151 additions & 0 deletions Hook thay đổi layout plugin review WAT
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,151 @@
    <?php
    // Gỡ bỏ action hiển thị số lượng đã bán của plugin
    function remove_original_sold_quantity_display_review_woo_wat() {
    // Xóa cả class và function (phải thực hiện sau khi class đã được khởi tạo)
    global $wp_filter;

    // Xóa hook hiển thị ở trang chi tiết sản phẩm
    if (isset($wp_filter['woocommerce_single_product_summary'])) {
    foreach ($wp_filter['woocommerce_single_product_summary']->callbacks as $priority => $callbacks) {
    foreach ($callbacks as $key => $callback) {
    if (is_array($callback['function']) && $callback['function'][1] === 'display_sold_quantity_review_woo_wat') {
    remove_action('woocommerce_single_product_summary', $callback['function'], $priority);
    }
    }
    }
    }

    // Xóa hook hiển thị ở trang danh mục sản phẩm
    if (isset($wp_filter['woocommerce_after_shop_loop_item_title'])) {
    foreach ($wp_filter['woocommerce_after_shop_loop_item_title']->callbacks as $priority => $callbacks) {
    foreach ($callbacks as $key => $callback) {
    if (is_array($callback['function']) && $callback['function'][1] === 'display_sold_quantity_review_woo_wat') {
    remove_action('woocommerce_after_shop_loop_item_title', $callback['function'], $priority);
    }
    }
    }
    }
    }
    // Thực hiện sau khi tất cả plugins đã được load
    add_action('wp_loaded', 'remove_original_sold_quantity_display_review_woo_wat', 20);

    // Hàm lấy tổng số lượng đã bán (giống y hệt plugin)
    function get_custom_total_sold_quantity_review_woo_wat($product_id) {
    $options = get_option('review_woo_wat_sold_quantity_options_review_woo_wat');
    $is_auto_update = isset($options['auto_update']) ? $options['auto_update'] : 1;

    // Nếu tắt chế độ tự động, ưu tiên số lượng nhập thủ công
    if (!$is_auto_update) {
    $manual_sold_quantity = get_post_meta($product_id, 'manual_sold_quantity_review_woo_wat', true);

    // Nếu có số lượng nhập thủ công, trả về số lượng đó
    if ($manual_sold_quantity !== '') {
    return intval($manual_sold_quantity);
    }
    }

    // Lấy số lượng đã bán tự động từ meta (đã được plugin cập nhật)
    $total_sold = get_post_meta($product_id, 'total_sold_quantity_review_woo_wat', true);

    // Nếu không có trong meta, tính toán từ đơn hàng
    if (!$total_sold) {
    // Sử dụng phương pháp mới với API của WooCommerce
    $args = [
    'status' => 'completed',
    'type' => 'shop_order',
    'limit' => -1
    ];
    $orders = wc_get_orders($args);

    $total_sold = 0;
    foreach ($orders as $order) {
    foreach ($order->get_items() as $item) {
    if ($item->get_product_id() == $product_id) {
    $total_sold += $item->get_quantity();
    }
    }
    }
    }

    return intval($total_sold);
    }

    // Thêm hàm hiển thị mới
    function custom_display_sold_quantity_review_woo_wat() {
    global $product;
    if ($product) {
    // Sử dụng hàm lấy số lượng đã bán tương tự như plugin
    $sold_quantity = get_custom_total_sold_quantity_review_woo_wat($product->get_id());

    // Chỉ hiển thị khi số lượng đã bán từ 1 trở lên
    if ($sold_quantity >= 1) {
    // Kiểm tra nếu đang ở trang danh mục sản phẩm
    if (is_shop() || is_product_category() || is_product_tag() || (function_exists('is_product_taxonomy') && is_product_taxonomy())) {
    // Hiển thị đơn giản cho trang danh mục
    echo '<div class="daban_sold_quantity_review_cmt_woo_wat" style="font-size: 0.9em;">' .
    sprintf('Đã bán %s',
    number_format_i18n($sold_quantity)) .
    '</div>';
    } else {
    // Hiển thị đầy đủ cho trang chi tiết sản phẩm
    // Xác định mức độ hot dựa trên số lượng đã bán
    $sold_percentage = min(100, max(20, round($sold_quantity / 5) * 5)); // Đây chỉ là công thức mẫu

    // HTML với thanh tiến trình có chữ bên trong
    echo '<div class="daban_sold_quantity_review_cmt_woo_wat">
    <div class="sold-progress-bar-review-woo-wat-container">
    <div class="sold-progress-bar-review-woo-wat" style="width: ' . $sold_percentage . '%;">
    <span class="sold-text-review-woo-wat">Đã bán ' . number_format_i18n($sold_quantity) . '</span>
    </div>
    </div>
    </div>';
    }
    }
    }
    }

    // Thêm CSS vào header
    function add_sold_quantity_custom_css_review_woo_wat() {
    ?>
    <style>
    .single-product .daban_sold_quantity_review_cmt_woo_wat {

    position: relative;
    }

    .single-product .sold-progress-bar-review-woo-wat-container {
    height: 20px;
    background-color: #f0f0f0;
    border-radius: 12px;
    position: relative;
    overflow: hidden;
    }

    .single-product .sold-progress-bar-review-woo-wat {
    height: 100%;
    background: linear-gradient(90deg, #ff7a00, #ff5252);
    border-radius: 12px;
    position: relative;
    min-width: 120px;
    transition: width 1s ease;
    }

    .single-product .sold-text-review-woo-wat {
    position: absolute;
    left: 12px;
    top: 50%;
    transform: translateY(-50%);
    color: white;
    font-weight: 600;
    font-size: 13px;
    white-space: nowrap;
    text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
    }
    </style>
    <?php
    }
    add_action('wp_head', 'add_sold_quantity_custom_css_review_woo_wat');

    // Thêm lại action với hàm mới
    add_action('woocommerce_single_product_summary', 'custom_display_sold_quantity_review_woo_wat', 8);
    add_action('woocommerce_after_shop_loop_item_title', 'custom_display_sold_quantity_review_woo_wat', 11);