
WooCommerce admin opombe naročil – HPOS, tooltip, datum in avtor
Pri delu z WooCommerce naročili se pogosto zgodi, da moramo hitro preveriti interne opombe ali sporočila za kupca, brez da bi vsakič odpirali posamezno naročilo. Privzeti WooCommerce tega ne omogoča.
V tem članku bomo pokazali, kako lahko v admin seznam naročil dodamo dva nova stolpca:
- Opomba zame (interne opombe)
- Opomba za kupca (customer notes)
Vsaka opomba je prikazana z:
- barvnim ozadjem (rdeče / zeleno),
- tooltipom, ki ob prehodu z miško pokaže datum in avtorja opombe,
- popolno podporo za HPOS (High-Performance Order Storage) in legacy način.
Kaj omogoča ta snippet?
✔ Prikaz zadnje interne opombe neposredno v seznamu naročil
✔ Prikaz zadnje opombe za kupca brez klikanja v naročilo
✔ Tooltip z datumom in avtorjem opombe
✔ Podpora za:
- nove WooCommerce instalacije (HPOS),
- stare / nadgrajene trgovine (legacy način)
✔ Brez dodatnih vtičnikov ali JavaScripta

Zakaj je to uporabno?
Če dnevno obdeluješ več naročil, ti ta rešitev omogoča:
- hitrejši pregled posebnih zahtev kupcev,
- boljšo interno komunikacijo v ekipi,
- manj klikov in manj napak,
- boljši nadzor nad stanjem naročil.
JavaScript
/**
* @snippet WooCommerce – Naročila: Opombe v admin seznamu (HPOS + Legacy + tooltip datum/avtor)
* @opis Doda stolpca "Opomba zame" in "Opomba za kupca" v seznam naročil (HPOS in legacy)
* ter prikaže zadnjo interno/kupčevo opombo z barvnim ozadjem in tooltipom (datum, avtor).
* @verzija 1.2
* @avtor WP Lab – https://wplab.si
*/
/**
* =========================================================
* 1) DODAJANJE STOLPCEV (HPOS + Legacy)
* =========================================================
*/
// HPOS (admin.php?page=wc-orders)
add_filter( 'manage_woocommerce_page_wc-orders_columns', 'wplab_add_order_note_columns' );
// Legacy (edit.php?post_type=shop_order)
add_filter( 'manage_edit-shop_order_columns', 'wplab_add_order_note_columns' );
function wplab_add_order_note_columns( $columns ) {
$new_columns = array();
$inserted = false;
foreach ( $columns as $key => $label ) {
$new_columns[ $key ] = $label;
// Primarno: takoj za "Status" (pogosto obstaja na obeh zaslonih)
if ( $key === 'order_status' ) {
$new_columns['opomba_zame'] = __( 'Opomba zame', 'theme_domain' );
$new_columns['opomba_kupcu'] = __( 'Opomba za kupca', 'theme_domain' );
$inserted = true;
}
}
// Fallback: če stolpec "order_status" ne obstaja, dodaj na konec
if ( ! $inserted ) {
$new_columns['opomba_zame'] = __( 'Opomba zame', 'theme_domain' );
$new_columns['opomba_kupcu'] = __( 'Opomba za kupca', 'theme_domain' );
}
return $new_columns;
}
/**
* =========================================================
* 2) PRIKAZ VSEBINE STOLPCEV (HPOS + Legacy)
* =========================================================
*/
// HPOS render stolpcev
add_action( 'manage_woocommerce_page_wc-orders_custom_column', 'wplab_display_order_note_columns', 10, 2 );
// Legacy render stolpcev
add_action( 'manage_shop_order_posts_custom_column', 'wplab_display_order_note_columns', 10, 2 );
function wplab_display_order_note_columns( $column, $order ) {
// Legacy action pogosto pošlje $order_id (int), HPOS pa WC_Order objekt
$order_id = is_a( $order, 'WC_Order' ) ? $order->get_id() : absint( $order );
if ( ! $order_id ) {
echo '<small><em>–</em></small>';
return;
}
// Helper: tooltip (datum + avtor)
$build_tooltip = function( $note ) {
$date_str = '—';
if ( isset( $note->date_created ) && is_a( $note->date_created, 'WC_DateTime' ) ) {
$date_str = $note->date_created->date_i18n( 'd.m.Y H:i' );
}
$author = '—';
if ( ! empty( $note->added_by ) ) {
$author = $note->added_by;
} elseif ( ! empty( $note->author ) ) {
$author = $note->author;
}
return sprintf( 'Datum: %s | Avtor: %s', $date_str, $author );
};
// Helper: izriši note box
$render_note_box = function( $note, $bg ) use ( $build_tooltip ) {
$tooltip = $build_tooltip( $note );
echo '<div
title="' . esc_attr( $tooltip ) . '"
style="background:' . esc_attr( $bg ) . '; padding:6px; border-radius:4px; cursor:help;"
>' .
wp_kses_post( $note->content ) .
'</div>';
};
// INTERNAL OPOMBA (zame)
if ( $column === 'opomba_zame' ) {
$notes = wc_get_order_notes( array(
'order_id' => $order_id,
'limit' => 1,
'orderby' => 'date_created',
'order' => 'DESC',
'type' => 'internal',
) );
if ( ! empty( $notes ) ) {
$render_note_box( current( $notes ), '#ffe5e5' );
} else {
echo '<small><em>–</em></small>';
}
return;
}
// CUSTOMER OPOMBA (kupcu)
if ( $column === 'opomba_kupcu' ) {
$notes = wc_get_order_notes( array(
'order_id' => $order_id,
'limit' => 1,
'orderby' => 'date_created',
'order' => 'DESC',
'type' => 'customer',
) );
if ( ! empty( $notes ) ) {
$render_note_box( current( $notes ), '#c9e1c7' );
} else {
echo '<small><em>–</em></small>';
}
return;
}
}