I can add an order note (private note) with:
$order->add_order_note($info_for_order);
But when I tried to get the values in some page with:
get_comments(['post_id' => $order_id])
// or
$order_object->get_customer_order_notes()
It simply returns an empty array. I googled this and i can't find the method to do it.
Order notes (private note) are only available for backend when using
get_comments()
function.
If you look atWC_Comments exclude_order_comments()
method you will see that front end queries are filtered regarding private order notes…
So the turn around is to build a custom function to get the private Order notes:
function get_private_order_notes( $order_id){
global $wpdb;
$table_perfixed = $wpdb->prefix . 'comments';
$results = $wpdb->get_results("
SELECT *
FROM $table_perfixed
WHERE `comment_post_ID` = $order_id
AND `comment_type` LIKE 'order_note'
");
foreach($results as $note){
$order_note[] = array(
'note_id' => $note->comment_ID,
'note_date' => $note->comment_date,
'note_author' => $note->comment_author,
'note_content' => $note->comment_content,
);
}
return $order_note;
}
Code goes in function.php file of your active child theme (or theme) or also in any plugin file.
This code is tested and works.
Usage (for example the $order_id = 6238
):
$order_id = 6238;
$order_notes = get_private_order_notes( $order_id );
foreach($order_notes as $note){
$note_id = $note['note_id'];
$note_date = $note['note_date'];
$note_author = $note['note_author'];
$note_content = $note['note_content'];
// Outputting each note content for the order
echo '<p>'.$note_content.'</p>';
}