این یک کد باحال برای غیر فعال سازی ارسال ایمیل به سفارشات هست.
همونطور که میدونین وقتی در سفارشات ووکامرس، سفارشی رو به حالات مختلف مثل، در انتظار پرداخت، لغو شده و … تغییر میدیم. یک ایمیل برای مشتری ارسال میشه و شاید ادمینها خیلی متمایل به ارسال ایمیل بابت این تغییرات نباشن.
در این آموزش سریع، نحوه اضافه کردن یک چک باکس به صفحه ویرایش تک سفارش را میبینیم.
به طوری که تا زمانی که چک باکس علامت خورده باشه، ارسال ایمیل ها غیرفعال است.
برای درست کردن این قضیه میتونیم از کد زیر استفاده کنیم.
/** * @snippet ووکامرس: غیر فعال کردن ارسال ایمیل هنگام تغیرات سفارش در بخش ادمین * @more articl pournasir.com * @compatible WooCommerce 5 */ // --------------- add_action( 'woocommerce_admin_order_data_after_order_details', 'pournasir_disable_order_emails', 9999 ); function pournasir_disable_order_emails( $order ) { woocommerce_wp_checkbox( array( 'id' => '_disable_order_emails', 'label' => '<b>Disable Order Emails</b>', 'description' => 'Check this if you wish to disable emails when order status changes', 'wrapper_class' => 'form-field-wide', 'style' => 'width:auto', )); } add_action( 'save_post_shop_order', 'pournasir_save_disable_order_emails' ); function pournasir_save_disable_order_emails( $order_id ) { global $pagenow, $typenow; if ( 'post.php' !== $pagenow || 'shop_order' !== $typenow ) return; if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( isset( $_POST['_disable_order_emails'] ) ) { update_post_meta( $order_id, '_disable_order_emails', $_POST['_disable_order_emails'] ); } else delete_post_meta( $order_id, '_disable_order_emails' ); } add_filter( 'woocommerce_email_recipient_customer_on_hold_order', 'pournasir_disable_customer_emails_if_disabled', 9999, 2 ); add_filter( 'woocommerce_email_recipient_customer_processing_order', 'pournasir_disable_customer_emails_if_disabled', 9999, 2 ); add_filter( 'woocommerce_email_recipient_customer_completed_order', 'pournasir_disable_customer_emails_if_disabled', 9999, 2 );function pournasir_disable_customer_emails_if_disabled( $recipient, $order ) { $page = $_GET['page'] = isset( $_GET['page'] ) ? $_GET['page'] : ''; if ( 'wc-settings' === $page ) { return $recipient; } if ( get_post_meta( $order->get_id(), '_disable_order_emails', true ) ) $recipient = ''; return $recipient; }