在创建新的WooCommerce订单时创建帖子

时间:2019-03-05 作者:CSUK

使用自定义功能我想在woocommerce中每次创建订单后创建。我需要在帖子标题和帖子内容中的项目列表中显示woocommerce订单id。有人做过类似的东西吗?到目前为止,我与zapier一起完成了这项工作,但我认为,如果服务器上发生的每一件事都发生,那么效率会更高。

3 个回复
最合适的回答,由SO网友:Antti Koskinen 整理而成

您可以将自定义的post创建函数挂接到woocommerce_thankyou 创建订单后在感谢页面上激发的操作。此操作为您提供$order_id 作为参数。

后期创建功能可以是这样的,

function create_post_after_order( $order_id ) {
  if (  $order_id ) {
    return;
  }      
  $order = wc_get_order( $order_id );
  $order_items = $order->get_items();    
  $content = \'<ul>\';
  // I\'m not entirely sure of this, please the check that the methods are correct
  foreach ( $order_items as $item_id => $item_data ) {
    $product = $item_data->get_product();
    $content .= \'<li>\' . $product->get_name() . \'</li>\';
  }
  $content .= \'</ul>\';    
  $postarr = array(
    \'post_title\'   => "Order {$order_id}",
    \'post_content\' => $content // I\'m not sure if you need to turn the tags into html entities or if wp_insert_post accepts the content as is
    // add more args as needed
  );    
  $new_post_id = wp_insert_post( $postarr );  
}
add_action( \'woocommerce_thankyou\', \'create_post_after_order\' );

SO网友:CSUK

非常感谢你!它给了我一些如何实现iti的想法,我不得不将感谢行动改为付款完成,因为它没有为POS订单或手动订单创建帖子。还有(邮资);似乎不起作用

这是工作代码

function create_post_after_order( $order_id ) {
  if (  $order_id instanceof WC_Order ){
    return;
  }      
  $order = wc_get_order( $order_id );
  $order_items = $order->get_items();    
  $content = \'<ul>\';
  foreach ( $order_items as $item_id => $item_data ) {
    $product = $item_data->get_product();
    $content .= \'<li>\' . $product->get_name() . \'</li>\';
  }
  $content .= \'</ul>\';    
  $new_post = array(
    \'post_title\'   => "Order {$order_id}",
    \'post_content\' => $content,
    \'post_status\' => \'private\',
    \'post_date\' => date(\'Y-m-d H:i:s\'),
    \'post_author\' => $user_ID,
    \'post_type\' => \'custom\',
  );    
  $post_id = wp_insert_post($new_post);
}
add_action( \'woocommerce_payment_complete\' , \'create_post_after_order\' );

SO网友:Jahid Hasan

只是使用woocommerce_payment_complete 胡克,试试看!

function create_custom_post_after_order( $order_id ) {
  if (  $order_id ) {
    $post = array();
    $post[\'post_type\'] = \'post\';
    $post[\'post_title\'] = \'Custom Post\';
    $post[\'post_content\'] = \'Custom Post\'.$order_id;
    $post[\'post_status\'] = \'Publish\';

    wp_insert_post($post);
  }      
 
}

add_action( \'woocommerce_payment_complete\' , \'create_custom_post_after_order\' );

相关推荐