1

I am assigning each product in WooCommerce to an author. Each author, when they sign up, adds in a short bio and this is saved with the author's user account. People are signing up with Profile Press.

I would like to insert this bio field into each product this author creates but I can seem to figure it out. Thanks in advance.

  • 1
    You did not specify where the user field is saved to (meta key), or where you want it inserted in the product – sMyles Feb 19 at 22:40
0

You can do this with an action when a new product is inserted (and not when updated). As you did not specify the meta key this field is stored under the user as, OR the meta key of where you want it stored on the product:

add_action( 'wp_insert_post', 'smyles_insert_user_product_data', 10, 3 );

function smyles_insert_user_product_data( $post_ID, $post, $update ){

    if( $update || $post->post_type !== 'product' ){
        return;
    }

    $user_id = get_current_user_id();

    if( $user_id ){
        $short_bio = get_user_meta( $user_id, 'some_meta_key', true );
        if( ! empty( $short_bio ) ){
            update_post_meta( $post_ID, 'product_meta_key', $short_bio );
        }
    }
}

This assumes that the "short bio" is stored in the user's meta, so you need to figure out that meta key and replace some_meta_key in the code above with correct one for the user.

You then also need to define what meta key you want to use to set that value in the product with, and replace product_meta_key above.

To find the user meta key used, you can use my User Meta Display plugin: https://wordpress.org/plugins/user-meta-display/ (it's a bit out-dated but still works)

UPDATE:

To update the description (post_content) before data in inserted into the database use this instead:

add_action( 'wp_insert_post_data', 'smyles_insert_user_product_data', 10, 2 );

function smyles_insert_user_product_data( $data, $postarr ){

    // Non-empty ID means it's an update (don't want to modify on update)
    if( ! empty( $postarr['ID'] ) || ! array_key_exists( 'post_type', $postarr ) || $postarr['post_type'] !== 'product' ){
        return $data;
    }

    $user_id = get_current_user_id();

    if( $user_id ){
        $short_bio = get_user_meta( $user_id, 'some_meta_key', true );
        if( ! empty( $short_bio ) ){
            $short_bio = wp_kses( $short_bio, true );
            $data['post_content'] = wp_slash( $short_bio );
        }
    }

    return $data;
}
  • Thanks so much for the response. How can I find the corresponding meta-key for that bio field? – Z Crow Feb 21 at 4:14
  • @ZCrow it's a little bit out-dated but still works, you can use my User Meta Display plugin to figure out what the user meta key is wordpress.org/plugins/user-meta-display – sMyles Feb 21 at 16:32
  • Thanks for the plugin suggestion. That gave me what I was looking for. – Z Crow Feb 22 at 16:37
  • Still can't get this to go. I appreciate your patience. So, the user meta key is called "description". The product meta key I can use is "description" as well (I'm using the short description for the product's description). Here is my code: – Z Crow Feb 22 at 17:44
  • function smyles_insert_user_product_data( $post_ID, $post, $update ){ if( $update || $post->post_type !== 'product' ){ return; } $user_id = get_current_user_id(); if( $user_id ){ $short_bio = get_user_meta( $user_id, 'description', true ); if( ! empty( $short_bio ) ){ update_post_meta( $post_ID, 'description', $short_bio ); } } } – Z Crow Feb 22 at 17:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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