PHP-WooCommerce 3.0:找不到与管理员创建的后端订单相对应的钩子

按照这个post的思路,当管理员使用我的付款网关通过管理面板创建订单时,我尝试连接到我自己的自定义付款网关.

我添加了以下代码:

    add_action( 'woocommerce_process_shop_order_meta', array( $this, 'process_offline_order' ) );
    add_action( 'woocommerce_admin_order_actions_end', array( $this, 'process_offline_order2' ) );
    add_action( 'woocommerce_save_post_shop_order', array( $this, 'process_offline_order3' ) );

我曾尝试将xdebug breakp点放入相应的方法中,但没有一个受到打击.

解决方法:

经过一些研究和测试,我认为正确的挂钩是以下WP挂钩之一:

> save_post_{$post->post_type}
> save_post
> wp_insert_post

所以我使用了第一个,因为它对于“ shop_order”帖子类型最方便:

add_action( 'save_post_shop_order', 'process_offline_order', 10, 3 );
function process_offline_order( $post_id, $post, $update ){

    // Orders in backend only
    if( ! is_admin() ) return;

    // Get an instance of the WC_Order object (in a plugin)
    $order = new WC_Order( $post_id ); 

    // For testing purpose
    $trigger_status = get_post_meta( $post_id, '_hook_is_triggered', true );

    // 1. Fired the first time you hit create a new order (before saving it)
    if( ! $update )
        update_post_meta( $post_id, '_hook_is_triggered', 'Create new order' ); // Testing

    if( $update ){
        // 2. Fired when saving a new order
        if( 'Create new order' == $trigger_status ){
            update_post_meta( $post_id, '_hook_is_triggered', 'Save the new order' ); // Testing
        }
        // 3. Fired when Updating an order
        else{
            update_post_meta( $post_id, '_hook_is_triggered', 'Update  order' ); // Testing
        }
    }
}

您将可以使用此代码轻松进行测试.对我来说,一切正常.

我还尝试了woocommerce_before_order_object_save挂钩,该挂钩具有2个参数:

> $order(WC_Order对象)
> $data_store(要通过WC_Data_Store类存储的数据)

但是我没有按预期的那样工作.我已经在WC_Order save()方法的源代码中找到它.

上一篇:php-WooCommerce-确定当前单个产品页面的产品类别


下一篇:php-在WooCommerce 3中“创建帐户”上方移动“结帐订单注释”字段