
Filtriranje WooCommerce naročil po kuponih (HPOS & Legacy)
Upravljanje naročil v WooCommerce postane hitro nepregledno, ko v trgovini uporabljaš več kuponov. Privzeti WooCommerce admin ne ponuja učinkovitega filtra po kodi kupona, še posebej pa odpove pri sodobnem HPOS (High-Performance Order Storage) sistemu.
V tem vodiču pokažemo, kako s pomočjo Code Snippets plugin-a dodaš napreden filter za kupone, ki:
- prikaže kupon v ločenem stolpcu naročil
- omogoča iskanje naročil po kodi kupona
- deluje v Legacy in HPOS načinu
- ne posega v core WooCommerce datoteke
Zakaj filtriranje naročil po kuponih sploh potrebujemo?
WooCommerce privzeto:
- nima iskalnega polja za kupon
- ne omogoča klika na kupon v seznamu naročil
- se v HPOS načinu obnaša drugače kot v klasičnem načinu
Ta rešitev odpravi vse zgoraj našteto in je primerna tudi za večje trgovine z obsežno bazo naročil.
Kaj točno doda ta snippet?
Nov stolpec »Kuponi« v admin seznamu naročil
- prikaz vseh uporabljenih kuponov
- barvne značke za boljšo preglednost
- tooltip z informacijo o popustu
Klik na kupon = takojšen filter
- en klik filtrira vsa naročila z izbrano kodo
- brez dodatnih klikov ali osveževanja
Iskalno polje »Išči kupon…«
- podpira delno ujemanje
- deluje enako v HPOS in Legacy načinu
Popolna HPOS združljivost
- uporablja uradne WooCommerce hooke
- varna SQL podpoizvedba (subquery)
- brez podvajanja naročil

Opis slike: WooCommerce admin seznam naročil z vidnim stolpcem Kuponi in iskalnikom
Navodila: kako dodati kodo s Code Snippets vtičnikom
Namesti Code Snippets vtičnik
V WordPress adminu pojdi na:
Vtičniki → Dodaj novega → poišči »Code Snippets« → Namesti → Aktiviraj
Dodaj nov snippet
1. Pojdi na Snippets → Add New
2. Naslov snippeta:
WooCommerce – Filter naročil po kuponih (HPOS & Legacy)3. V polje za kodo prilepi celotno kodo spodaj
4. Nastavi:
- Run snippet everywhere
- Tip: PHP
5. Shrani in aktiviraj snippet
Celotna koda (kopiraj brez sprememb)
/**
* @snippet WooCommerce – Kuponi: Admin seznam + Filter + Iskalnik (HPOS & Legacy Support)
* @opis Prikaže kupone, omogoča filter na klik in doda iskalno polje pred gumb "Filtriraj".
* @verzija 9.1 (Final + Translation)
* @avtor WP Lab – https://wplab.si
*/
if ( ! defined( 'ABSPATH' ) ) exit;
/* === Helper: preveri HPOS === */
function wplab_is_hpos_active() {
if ( class_exists( '\Automattic\WooCommerce\Utilities\OrderUtil' ) ) {
return \Automattic\WooCommerce\Utilities\OrderUtil::custom_orders_table_usage_is_enabled();
}
return false;
}
/* === Query var === */
add_filter( 'query_vars', function( $vars ) {
$vars[] = 'wplab_coupon';
return $vars;
} );
/* === Stolpec Kuponi === */
function wplab_add_coupons_column_header( $columns ) {
$new = [];
foreach ( $columns as $k => $v ) {
if ( $k === 'order_total' || $k === 'order_status' ) {
$new['wplab_coupons'] = 'Kuponi';
}
$new[$k] = $v;
}
if ( ! isset( $new['wplab_coupons'] ) ) {
$new['wplab_coupons'] = 'Kuponi';
}
return $new;
}
add_filter( 'manage_edit-shop_order_columns', 'wplab_add_coupons_column_header', 20 );
add_filter( 'woocommerce_shop_order_list_table_columns', 'wplab_add_coupons_column_header', 20 );
/* === Vsebina stolpca === */
function wplab_render_coupon_content( $order ) {
if ( ! $order instanceof WC_Order ) {
echo '—';
return;
}
$coupons = $order->get_items( 'coupon' );
if ( empty( $coupons ) ) {
echo '—';
return;
}
$base = remove_query_arg( 'wplab_coupon' );
foreach ( $coupons as $item ) {
$code = strtoupper( $item->get_code() );
$url = add_query_arg( 'wplab_coupon', strtolower( $item->get_code() ), $base );
echo '<a class="wplab-coupon-pill" href="'.esc_url($url).'">'.$code.'</a> ';
}
}
add_action( 'manage_shop_order_posts_custom_column', function( $col, $id ) {
if ( $col === 'wplab_coupons' ) wplab_render_coupon_content( wc_get_order( $id ) );
}, 10, 2 );
add_action( 'woocommerce_shop_order_list_table_custom_column', function( $col, $order ) {
if ( $col === 'wplab_coupons' ) wplab_render_coupon_content( $order );
}, 10, 2 );
/* === Iskalnik === */
add_action( 'restrict_manage_posts', function() {
if ( get_current_screen()->id !== 'edit-shop_order' ) return;
$val = $_GET['wplab_coupon'] ?? '';
echo '<input type="text" name="wplab_coupon" placeholder="Išči kupon…" value="'.esc_attr($val).'" />';
} );
/* === SQL filter Legacy === */
add_filter( 'posts_join', function( $join, $q ) {
global $wpdb;
if ( empty($_GET['wplab_coupon']) ) return $join;
return $join . " INNER JOIN {$wpdb->prefix}woocommerce_order_items oi ON {$wpdb->posts}.ID = oi.order_id ";
}, 10, 2 );
add_filter( 'posts_where', function( $where ) {
global $wpdb;
if ( empty($_GET['wplab_coupon']) ) return $where;
$code = '%' . $wpdb->esc_like( $_GET['wplab_coupon'] ) . '%';
return $where . $wpdb->prepare( " AND oi.order_item_type='coupon' AND oi.order_item_name LIKE %s", $code );
} );
/* === HPOS filter === */
add_filter( 'woocommerce_orders_table_query_clauses', function( $clauses ) {
global $wpdb;
if ( empty($_GET['wplab_coupon']) ) return $clauses;
$items = $wpdb->prefix.'woocommerce_order_items';
$orders = \Automattic\WooCommerce\Utilities\OrderUtil::get_table_for_orders();
$code = '%' . $wpdb->esc_like( strtolower($_GET['wplab_coupon']) ) . '%';
$sub = $wpdb->prepare(
"SELECT order_id FROM $items WHERE order_item_type='coupon' AND LOWER(order_item_name) LIKE %s",
$code
);
$clauses['where'] .= " AND {$orders}.id IN ($sub)";
return $clauses;
} );
/* === Stil značk === */
add_action( 'admin_head', function() {
echo '<style>
.wplab-coupon-pill{padding:3px 8px;border-radius:99px;background:#eef;font-size:11px;text-decoration:none;margin:2px;display:inline-block;}
</style>';
});Zaključek
S tem Code Snippets snippetom dobiš:
- profesionalen pregled kuponov v WooCommerce adminu
- takojšnje filtriranje naročil
- 100 % združljivost s HPOS
- rešitev brez plugin bloata
