WooCommerce 管理订单列表中发送客户发票的操作按钮

问题描述

wordpress 管理仪表板中,当您打开 woocommerce 订单页面时,您将看到订单列表,并且列是(订单、日期、状态、账单、发货、总计、操作) >

我想为操作列表添加一个新按钮,然后添加此操作以将电子邮件发票发送给订单仍处于暂停状态的客户。

enter image description here

我已经创建了如下所示的列和按钮,但是我无法调用操作按钮将每个订单的发票发送给客户。

请指教。

add_filter( 'woocommerce_admin_order_actions','add_custom_order_status_actions_button',100,2 );
function add_custom_order_status_actions_button( $actions,$order ) {

    if ( $order->has_status( array( 'on-hold' ) ) ) {

        // The key slug defined for your action button
        $action_slug = 'invoice';
        $status = $_GET['status'];
        $order_id = method_exists($the_order,'get_id') ? $the_order->get_id() : $the_order->id;
        // Set the action button
        $actions[$action_slug] = array(
            'url'       => admin_url('post.PHP?post=' . $post_id . '&action=edit&message=11'),'name'      => __( 'Invoice','woocommerce' ),'action'    => $action_slug,);
    }
    return $actions;
}

add_action( 'admin_head','add_custom_order_status_actions_button_css' );
function add_custom_order_status_actions_button_css() {
    $action_slug = "invoice"; // The key slug defined for your action button
    echo '<style>.wc-action-button-'.$action_slug.'::after { font-family: woocommerce !important; content: "\e029" !important; }</style>';
}

解决方法

更新(添加缺失的'

以下将在管理订单列表操作列中添加一个用于具有“暂停”状态的订单的操作按钮。该按钮通过管理员 Ajax 发送客户发票通知。

完整代码:

add_filter( 'woocommerce_admin_order_actions','add_admin_order_custom_actions_button',100,2 );
function add_admin_order_custom_actions_button( $actions,$order ) {
    if ( $order->has_status( array( 'on-hold' ) ) ) {
        // The key slug defined for your action button
        $action_slug = 'email_invoice';

        // Set the action button
        $actions[$action_slug] = array(
            'url'    => wp_nonce_url(
                admin_url('admin-ajax.php?action=send_invoice_email&order_id=' . $order->get_id() ),'send-invoice-email'
            ),'name'   => __( 'Send Invoice','woocommerce' ),'action' => $action_slug,);
    }
    return $actions;
}

add_action( 'wp_ajax_send_invoice_email','trigger_customer_email_invoice' );
function trigger_customer_email_invoice() {
    if ( current_user_can('edit_shop_orders') && check_admin_referer('send-invoice-email') &&
    isset($_GET['order_id']) && get_post_type( absint( wp_unslash($_GET['order_id']) ) ) === 'shop_order' ) {
        $order_id = absint( wp_unslash($_GET['order_id']) );

        WC()->mailer()->get_emails()['WC_Email_Customer_Invoice']->trigger($order_id); // Send email
        update_post_meta( $order_id,'_invoice_sent','OK' ); // For testing purpose (to be removed)
    }
}

add_action( 'admin_head','add_custom_order_status_actions_button_css' );
function add_custom_order_status_actions_button_css() {
    $action_slug = "email_invoice"; // The key slug defined for your action button
    echo '<style>.wc-action-button-'.$action_slug.'::after { font-family: woocommerce !important; content: "\e02d" !important; }</style>';
}

代码位于活动子主题(或活动主题)的functions.php 文件中。经测试有效。