我有一个名为Event
的自定义帖子类型,我想通过woocommerce进行销售。所以我想要的是,当我创建事件帖子时,它会自动在woocommerce下创建一个具有相同名称的产品。有可能吗?
我尝试了在Create a Woocommerce product when post is created
中找到的以下代码add_action( 'save_event', 'auto_create_product_from_post', 100, 2 );
function auto_create_product_from_post($id, $post){
$post_id = wp_insert_post( array(
//'post_title' => 'Adams Product',
'post_title' => $post.post_title,
'post_content' => $post.post_title,
'post_status' => 'publish',
'post_type' => "product",
) );
wp_set_object_terms( $post_id, 'simple', 'product_type' );
update_post_meta( $post_id, '_visibility', 'visible' );
update_post_meta( $post_id, '_stock_status', 'instock');
update_post_meta( $post_id, 'total_sales', '0' );
update_post_meta( $post_id, '_downloadable', 'no' );
update_post_meta( $post_id, '_virtual', 'yes' );
update_post_meta( $post_id, '_regular_price', '' );
update_post_meta( $post_id, '_sale_price', '' );
update_post_meta( $post_id, '_purchase_note', '' );
update_post_meta( $post_id, '_featured', 'no' );
update_post_meta( $post_id, '_weight', '' );
update_post_meta( $post_id, '_length', '' );
update_post_meta( $post_id, '_width', '' );
update_post_meta( $post_id, '_height', '' );
update_post_meta( $post_id, '_sku', '' );
update_post_meta( $post_id, '_product_attributes', array() );
update_post_meta( $post_id, '_sale_price_dates_from', '' );
update_post_meta( $post_id, '_sale_price_dates_to', '' );
update_post_meta( $post_id, '_price', '' );
update_post_meta( $post_id, '_sold_individually', '' );
update_post_meta( $post_id, '_manage_stock', 'no' );
update_post_meta( $post_id, '_backorders', 'no' );
update_post_meta( $post_id, '_stock', '' );
}
但是上面的代码给了我Recoverable fatal error: Object of class WP_Post could not be converted to string
错误。我将动作挂钩更改为publish_event
,但我的网站陷入了无限循环,即使删除了代码,仍然创建了很多产品。
答案 0 :(得分:1)
错误的部分是$post.post_title
…$post
是WP_Post
对象,因此请在->
中使用$post->post_title
,以获取帖子标题为{{1} }用于PHP中的字符串连接。
所以在您的代码中:
.
这将解决您的问题。
一种更好的方法:自WooCommerce 3以来,您可以像这样使用CRUD Objects:
$product = wp_insert_post( array(
//'post_title' => 'Adams Product',
'post_title' => $post->post_title, // <=== HERE
'post_content' => $post->post_content, // <=== Changed
'post_status' => 'publish',
'post_type' => "product",
) );
代码进入活动子主题(或活动主题)的functions.php文件中。经过测试和工作。