php 我在WooCommerce中的订单编辑页面上出现405错误,也许我使用了错误的钩子?

ttcibm8c  于 2024-01-05  发布在  PHP
关注(0)|答案(1)|浏览(217)

我在订单编辑页面上添加了一个自定义Meta框,并试图保存数据,但出现了405错误(数据保存成功,代码似乎可以工作):

  1. // Adding Meta container admin shop_order pages
  2. add_action( 'add_meta_boxes', function() {
  3. add_meta_box(
  4. 'tracking_field',
  5. __('Tracking number','woodmart-child'),
  6. 'add_tracking_field_content',
  7. wc_get_page_screen_id('shop-order'),
  8. 'side',
  9. 'core'
  10. );
  11. });
  12. // Adding Meta field in the meta container on admin shop_order pages
  13. function add_tracking_field_content( $order ) {
  14. echo '<input type="text" style="width:100%" name="ttn_number" placeholder="'. __('Tracking number', 'woodmart-child') .'" value="'. $order->get_transaction_id() .'">';
  15. echo '<input type="hidden" name="ttn_nonce" value="'. wp_create_nonce() .'">';
  16. }
  17. add_action( 'woocommerce_update_order', 'save_tracking_number', 10, 2 );
  18. function save_tracking_number($order_id, $order){
  19. if ( ! isset($_REQUEST['ttn_nonce']) && ! wp_verify_nonce($_REQUEST['ttn_nonce']) ) {
  20. return $order_id;
  21. }
  22. $ttn_number = sanitize_text_field( $_POST['ttn_number'] );
  23. $order->set_transaction_id($ttn_number);
  24. if(!empty($ttn_number)) {
  25. $order->update_status('wc-arrival-shipment', '', true);
  26. }
  27. $order->save();
  28. }

字符串
我使用WooCommerce与HPOS激活功能,所以默认挂钩save_post_shop_order不为我工作.
我发现woocommerce_update_order挂钩,但我认为这是一个坏主意,或者它只是不允许使用$order->set_transaction_id() .

omqzjyyz

omqzjyyz1#

设置自定义交易ID可能不是最好的选择。您可以在订单中添加自定义Meta框。还更改了一点nonce处理并添加了操作。

  1. add_action('add_meta_boxes', function () {
  2. add_meta_box(
  3. 'tracking_field',
  4. __('Tracking number', 'woodmart-child'),
  5. 'add_tracking_field_content',
  6. wc_get_page_screen_id('shop-order'),
  7. 'side',
  8. 'core'
  9. );
  10. });
  11. function add_tracking_field_content($order) {
  12. echo '<input type="text" style="width:100%" name="ttn_number" placeholder="' . __('Tracking number', 'woodmart-child') . '" value="' . esc_attr($order->get_meta('_ttn_number')) . '">';
  13. echo '<input type="hidden" name="ttn_nonce" value="' . esc_attr(wp_create_nonce('ttn_nonce')) . '">';
  14. }
  15. add_action('woocommerce_process_shop_order_meta', 'save_tracking_number');
  16. function save_tracking_number($order_id) {
  17. if (!isset($_POST['ttn_nonce']) || !wp_verify_nonce($_POST['ttn_nonce'], 'ttn_nonce')) {
  18. return;
  19. }
  20. $ttn_number = sanitize_text_field($_POST['ttn_number']);
  21. update_post_meta($order_id, '_ttn_number', $ttn_number);
  22. if (!empty($ttn_number)) {
  23. $order = wc_get_order($order_id);
  24. $order->update_status('wc-arrival-shipment', '', true);
  25. }
  26. }

字符串

展开查看全部

相关问题