1

There have been many threads and topics over the past few years about how to create a custom comment type. For the most part it's my understanding that it's possible (because WooCommerce does it) but recommended to use comment_meta instead.

My question is how does WooCommerce add the comment_type of order_note to the dropdown in Comment Administration?

A regrex of WooCommerce's code turns up nothing helpful. Any direction is appreciated.

Example of adding a comment with the type of order_note:

/**
 * Adds a note (comment) to the order
 *
 * @access public
 * @param string $note Note to add
 * @param int $is_customer_note (default: 0) Is this a note for the customer?
 * @return id Comment ID
 *
 * *file is class-wp-order.php*
 */
public function add_order_note( $note, $is_customer_note = 0 ) {

    $is_customer_note = intval( $is_customer_note );

    if ( is_user_logged_in() && current_user_can( 'manage_woocommerce' ) ) {
        $user                 = get_user_by( 'id', get_current_user_id() );
        $comment_author       = $user->display_name;
        $comment_author_email = $user->user_email;
    } else {
        $comment_author       = __( 'WooCommerce', 'woocommerce' );
        $comment_author_email = strtolower( __( 'WooCommerce', 'woocommerce' ) ) . '@';
        $comment_author_email .= isset( $_SERVER['HTTP_HOST'] ) ? str_replace( 'www.', '', $_SERVER['HTTP_HOST'] ) : 'noreply.com';
        $comment_author_email = sanitize_email( $comment_author_email );
    }

    $comment_post_ID        = $this->id;
    $comment_author_url     = '';
    $comment_content        = $note;
    $comment_agent          = 'WooCommerce';
    $comment_type           = 'order_note';
    $comment_parent         = 0;
    $comment_approved       = 1;
    $commentdata            = apply_filters( 'woocommerce_new_order_note_data', compact( 'comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_agent', 'comment_type', 'comment_parent', 'comment_approved' ), array( 'order_id' => $this->id, 'is_customer_note' => $is_customer_note ) );

    $comment_id = wp_insert_comment( $commentdata );

    add_comment_meta( $comment_id, 'is_customer_note', $is_customer_note );

    if ( $is_customer_note )
        do_action( 'woocommerce_new_customer_note', array( 'order_id' => $this->id, 'customer_note' => $note ) );

    return $comment_id;
}

Previous question: The project I'm working on right now would be much, much easier if I could just add a comment_type in addition to comment_meta where appropriate. My question is where should I be looking for a guide/example on how to do this?

2
  • Since there is no native concept of comment type in WordPress this is a little too open ended. It is possible to create something like comments, but fully replicating comments down to interface is enormous task. Please try to focus your question on more specific requirements and issues of implementation.
    – Rarst
    Sep 16, 2013 at 12:46
  • I agree, the question was poorly worded now that I look at it again. Thank you.
    – MTT
    Sep 16, 2013 at 13:38

1 Answer 1

5
+50

To answer your first question: »How does WooCommerce add the comment_type of order_note to the dropdown in Comment Administration?«. From woocommerce-admin-init.php:

function woocommerce_admin_comment_types_dropdown( $types ) {
    $types['order_note'] = __( 'Order notes', 'woocommerce' );
    return $types;
}

add_filter( 'admin_comment_types_dropdown', 'woocommerce_admin_comment_types_dropdown' );

Of course you have to do your own, to avoid conflicts, like this:

add_filter( 'admin_comment_types_dropdown', 'wpse114725_admin_comment_types_dropdown' );
function wpse114725_admin_comment_types_dropdown( $types ) {
    //replace the 'your...'-parts as needed
    $types['your_note_type'] = __( 'Your Note Type', 'your-text-domain' );
    return $types;
}



Regarding your second, previous question: »Where should I be looking for a guide/example on how to do this?«. From the looks of it you can get a pretty good example out of the woocommerce files.

Besides that the functions you need are all documented, for example: wp_insert_comment, wp_update_comment and wp_delete_comment. It's maybe not the most comprehensive part of the codex, but the important information is there, of course you can always look in the source: wp-includes/comment.php.

From what you wrote I'm assuming you know your way with comment meta, i.e. add_comment_meta(), get_comment_meta(), update_comment_meta() and delete_comment_meta() - you can also find those in the codex, the source file is the same as linked above.

Because you haven't posted a real problem to solve, I'd say that's just about it - of course that's not it at all, but this should get you a good overview where to start.

You might want to take a look at @brasofilo's answer to How to add filter in “Comments” at the admin panel?, for more information and some additional keywords to guide you.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.