Badge – Top 10 bedst sælgende!

Denne funktion kan bruges, hvis du ønsker at vise et badge på dine produkter – både i produktloopet og på selve produktsiden – når produktet er blandt de 10 bedst sælgende på din webshop.

Koden fungerer automatisk, så den selv tjekker, hvilke produkter der aktuelt er blandt de 10 mest populære. Dermed opdateres visningen af badget helt af sig selv.

Vi anbefaler, at du også installerer pluginet “DynamicConditions”. Med dette plugin kan du skjule badget fuldstændigt på produkter, hvor det ikke skal vises. Konfigurer pluginet til at kontrollere shortcode-resultatet, og vælg indstillingen “Hide when” → “Is empty”. På den måde sikrer du, at dit loop ikke indlæser unødvendig tom kode, hvilket forbedrer sidens ydeevne.

Der skal efterfølgende selv laves CSS som passer til designet.

Du kan også blot ændre hvad der skal stå i badget.

Indsæt i pluginnet "Snippets"

// Function to fetch top 10 selling products (cached)
function get_top_10_selling_products() {
    if ( false === ( $top_products = get_transient( 'top_10_selling_products' ) ) ) {
        $args = [
            'post_type'      => 'product',
            'posts_per_page' => 10,
            'meta_key'       => 'total_sales',
            'orderby'        => 'meta_value_num',
            'order'          => 'DESC',
            'fields'         => 'ids',
        ];

        $top_products = get_posts( $args );

        set_transient( 'top_10_selling_products', $top_products, HOUR_IN_SECONDS );
    }

    return $top_products;
}

// Shortcode for "Top 10 bestseller" badge
add_shortcode( 'top_10_badge', 'top_10_bestseller_badge_shortcode' );

function top_10_bestseller_badge_shortcode() {
    global $product;

    if ( ! $product || ! is_a( $product, 'WC_Product' ) ) {
        return '';
    }

    $product_id   = $product->get_id();
    $top_products = get_top_10_selling_products();
    $sales_count  = (int) get_post_meta( $product_id, 'total_sales', true );

    // Ensure the product has at least 1 sale
    if ( $sales_count === 0 ) {
        return '';
    }

    if ( in_array( $product_id, $top_products ) ) {
        ob_start();
        ?>
        <span class="badge-top-10">Top 10 bedst sælgende!</span>
        <?php
        return ob_get_clean();
    }

    return '';
}


// Clear cache when products are purchased
add_action( 'woocommerce_order_status_completed', 'clear_top_10_cache' );
add_action( 'woocommerce_order_status_processing', 'clear_top_10_cache' );

function clear_top_10_cache() {
    delete_transient( 'top_10_selling_products' );
}