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

ttcibm8c  于 12个月前  发布在  PHP
关注(0)|答案(1)|浏览(163)

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

// Adding Meta container admin shop_order pages
add_action( 'add_meta_boxes', function() {
    add_meta_box(
        'tracking_field',
        __('Tracking number','woodmart-child'),
        'add_tracking_field_content',
        wc_get_page_screen_id('shop-order'),
        'side',
        'core'
    );
});

// Adding Meta field in the meta container on admin shop_order pages
function add_tracking_field_content( $order ) {
    
    echo '<input type="text" style="width:100%" name="ttn_number" placeholder="'. __('Tracking number', 'woodmart-child') .'" value="'. $order->get_transaction_id() .'">';
    echo '<input type="hidden" name="ttn_nonce" value="'. wp_create_nonce() .'">';
    
}

add_action( 'woocommerce_update_order', 'save_tracking_number', 10, 2 );
function save_tracking_number($order_id, $order){
    
    if ( ! isset($_REQUEST['ttn_nonce']) && ! wp_verify_nonce($_REQUEST['ttn_nonce']) ) {
        return $order_id;
    }
    
    $ttn_number = sanitize_text_field( $_POST['ttn_number'] );
    $order->set_transaction_id($ttn_number);
    if(!empty($ttn_number)) {
        $order->update_status('wc-arrival-shipment', '', true);
    }
    $order->save();

}

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

omqzjyyz

omqzjyyz1#

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

add_action('add_meta_boxes', function () {
    add_meta_box(
        'tracking_field',
        __('Tracking number', 'woodmart-child'),
        'add_tracking_field_content',
        wc_get_page_screen_id('shop-order'),
        'side',
        'core'
    );
});

function add_tracking_field_content($order) {
    echo '<input type="text" style="width:100%" name="ttn_number" placeholder="' . __('Tracking number', 'woodmart-child') . '" value="' . esc_attr($order->get_meta('_ttn_number')) . '">';
    echo '<input type="hidden" name="ttn_nonce" value="' . esc_attr(wp_create_nonce('ttn_nonce')) . '">';
}

add_action('woocommerce_process_shop_order_meta', 'save_tracking_number');
function save_tracking_number($order_id) {
    if (!isset($_POST['ttn_nonce']) || !wp_verify_nonce($_POST['ttn_nonce'], 'ttn_nonce')) {
        return;
    }

    $ttn_number = sanitize_text_field($_POST['ttn_number']);
    update_post_meta($order_id, '_ttn_number', $ttn_number);

    if (!empty($ttn_number)) {
        $order = wc_get_order($order_id);
        $order->update_status('wc-arrival-shipment', '', true);
    }
}

字符串

相关问题