发布自定义帖子类型时以相同的名称创建WooCommerce产品

时间:2019-05-30 12:27:13

标签: php wordpress woocommerce product custom-post-type

我有一个名为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,但我的网站陷入了无限循环,即使删除了代码,仍然创建了很多产品。

1 个答案:

答案 0 :(得分:1)

错误的部分是$post.post_title$postWP_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文件中。经过测试和工作。