Search code examples
phpwordpresswoocommercecommentsrating

Add a product review with ratings programmatically in Woocommerce


The title says it all. I know the reviews are the native comments post type in Wordpress. I have included the code to add a comment.

The problem is however I am unclear how to give the comment a rating and how to tie it to a particular product. When I use the comment_post_ID it does not seem to be assigning the comment (review) to the correct post.

$time = current_time('mysql');

$data = array(
    'comment_post_ID' => 1,
    'comment_author' => 'admin',
    'comment_author_email' => '[email protected]',
    'comment_author_url' => 'http://',
    'comment_content' => 'content here',
    'comment_type' => '',
    'comment_parent' => 0,
    'user_id' => 1,
    'comment_author_IP' => '127.0.0.1',
    'comment_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)',
    'comment_date' => $time,
    'comment_approved' => 1,
);

wp_insert_comment($data);

Solution

  • With the key 'comment_post_ID' is where your comment will be shown, so desired product ID

    Then you can use update_comment_meta() dedicated WordPress function to add a rating, like:

    update_comment_meta( $comment_id, 'rating', 3 ); // The rating is an integer from 1 to 5
    

    So your code will be like (where $product_id is the targeted product Id for this review):

    $comment_id = wp_insert_comment( array(
        'comment_post_ID'      => 37, // <=== The product ID where the review will show up
        'comment_author'       => 'LoicTheAztec',
        'comment_author_email' => '[email protected]', // <== Important
        'comment_author_url'   => '',
        'comment_content'      => 'content here',
        'comment_type'         => '',
        'comment_parent'       => 0,
        'user_id'              => 5, // <== Important
        'comment_author_IP'    => '',
        'comment_agent'        => '',
        'comment_date'         => date('Y-m-d H:i:s'),
        'comment_approved'     => 1,
    ) );
    
    // HERE inserting the rating (an integer from 1 to 5)
    update_comment_meta( $comment_id, 'rating', 3 );
    

    Tested and works as intended.

    The author email and the user ID need to be some existing ones.

    enter image description here