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

问题描述 投票:0回答:1

在 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>';
}
php ajax wordpress woocommerce email-notifications
1个回答
1
投票

添加 (对于 HPOS).

以下内容将在管理订单列表操作列中添加具有“暂停”状态的订单的操作按钮。该按钮通过管理 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文件中(或插件中)。经过测试且有效

重要提示:确保您在“屏幕选项”选项卡中启用了“操作”复选框(位于右侧)


添加高性能订单存储(HPOS):

将最后一个函数替换为:

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>.widefat .column-wc_actions a.'.$action_slug.'::after { font-family: woocommerce; content: "\e029" !important; }</style>';
}
© www.soinside.com 2019 - 2024. All rights reserved.