- Bỏ phần sidebar của woocommerce trong trang hiển thị sản phẩm
- Thêm nội dung vào trước và sau giá của sản phẩm trong Woocommerce
- Chia sẻ mẹo nhỏ để chặn comment spam trong WordPress
- Chia sẻ nút đếm ngược để hiển thị mật khẩu trong WordPress
- Thay đổi cách hiển thị giá cho các Variable Product trong Woocommerce
Như các bạn cũng biết, mặc định Woo có sẵn shortcode [woocommerce_order_tracking] để khách có thể theo dõi thông tin đơn hàng của mình và mặc định Woo dùng Order ID và Email mới có thể theo dõi được
Vấn đề đặt ra là nếu form checkout của bạn không bắt buộc khách nhập Email hoặc bạn đã bỏ luôn trường email trong form thanh toán đi rồi thì làm sao khách có thể theo dõi được?
Để giải quyết vấn đề đó bạn chỉ cần chuyển trường Email sang Số điện thoại là được. Lúc đó khách sẽ dùng Order ID và Số điện thoại để theo dõi đơn hàng của mình
Để duy trì blog nên mình có làm aff cho 1 số bên hosting. Nhưng dù aff mình cũng chọn 1 số nhà cung cấp uy tín về chất lượng và support nên các bạn cứ yên tâm nhé.
Nếu có mua hosting mà có trong list dưới đây các bạn click vào link trước khi mua để ủng hộ mình nhé. Mình cảm ơn nhiều
- Azdigi: Giá rẻ thì dùng gói Pro Gold Hosting còn chất lượng hơn thì em khuyên dùng Business Hosting. Có điều kiện thì lên VPS nhé
- Tino hosting
- iNet
- Nước ngoài thì Vultr
Code theo dõi đơn hàng bằng số điện thoại và Order ID
Code dưới đây mình vẫn sử dụng tên shortcode như của woo nên nếu ai đang có sẵn trang tracking rồi thì không cần thay đổi lại shortcode mà chỉ cần chèn code là được
Còn nếu ai bây giờ mới sử dụng chức năng theo dõi đơn hàng này thì chỉ cần chèn code vào file wp-content/themes/{your-theme}/functions.php rồi dán shortcode [woocommerce_order_tracking] vào page cần hiển thị form theo dõi là được nhé
Code chèn vào functions.php như sau
/*
* Code theo dõi đơn hàng bằng SĐT
* Author levantoan.com
* */
add_action('init', function (){
remove_shortcode('woocommerce_order_tracking');
add_shortcode('woocommerce_order_tracking', function ($atts){
global $post;
// Check cart class is loaded or abort.
if ( is_null( WC()->cart ) ) {
return;
}
ob_start();
$atts = shortcode_atts( array(), $atts, 'woocommerce_order_tracking' );
$nonce_value = wc_get_var( $_REQUEST['woocommerce-order-tracking-nonce'], wc_get_var( $_REQUEST['_wpnonce'], '' ) ); // @codingStandardsIgnoreLine.
if ( isset( $_REQUEST['orderid'] ) && wp_verify_nonce( $nonce_value, 'woocommerce-order_tracking' ) ) { // WPCS: input var ok.
$order_id = empty( $_REQUEST['orderid'] ) ? 0 : ltrim( wc_clean( wp_unslash( $_REQUEST['orderid'] ) ), '#' ); // WPCS: input var ok.
$order_phone = empty( $_REQUEST['order_phone'] ) ? '' : sanitize_text_field( wp_unslash( $_REQUEST['order_phone'] ) ); // WPCS: input var ok.
if ( ! $order_id ) {
wc_print_notice( __( 'Vui lòng nhập ID đơn hàng', 'devvn' ), 'error' );
} elseif ( ! $order_phone ) {
wc_print_notice( __( 'Vui lòng nhập số điện thoại', 'devvn' ), 'error' );
} else {
$order = wc_get_order( apply_filters( 'woocommerce_shortcode_order_tracking_order_id', $order_id ) );
if ( $order && $order->get_id() && is_a( $order, 'WC_Order' ) && strtolower( $order->get_billing_phone() ) === strtolower( $order_phone ) ) {
do_action( 'woocommerce_track_order', $order->get_id() );
wc_get_template(
'order/tracking.php',
array(
'order' => $order,
)
);
return ob_get_clean();
} else {
wc_print_notice( __( 'Xin lỗi, Chúng tôi không tìm thấy thông tin đơn hàng của bạn. Vui lòng liên hệ với chúng tôi để biết thông tin chi tiết!', 'devvn' ), 'error' );
}
}
}
wc_print_notices();
?>
<form action="<?php echo esc_url( get_permalink( $post->ID ) ); ?>" method="post" class="woocommerce-form woocommerce-form-track-order track_order">
<?php
do_action( 'woocommerce_order_tracking_form_start' );
?>
<p><?php esc_html_e( 'Để theo dõi đơn hàng của bạn xin vui lòng nhập ID đơn hàng và số điện thoại của bạn vào ô dưới đây và nhấn nút "Theo dõi".', 'devvn' ); ?></p>
<p class="form-row form-row-first"><label for="orderid"><?php esc_html_e( 'ID Đơn hàng', 'devvn' ); ?></label> <input class="input-text" type="text" name="orderid" id="orderid" value="<?php echo isset( $_REQUEST['orderid'] ) ? esc_attr( wp_unslash( $_REQUEST['orderid'] ) ) : ''; ?>" placeholder="<?php esc_attr_e( 'Nhập ID Đơn hàng của bạn', 'devvn' ); ?>" /></p><?php // @codingStandardsIgnoreLine ?>
<p class="form-row form-row-last"><label for="order_phone"><?php esc_html_e( 'Số điện thoại', 'devvn' ); ?></label> <input class="input-text" type="text" name="order_phone" id="order_phone" value="<?php echo isset( $_REQUEST['order_phone'] ) ? esc_attr( wp_unslash( $_REQUEST['order_phone'] ) ) : ''; ?>" placeholder="<?php esc_attr_e( 'Nhập số điện thoại của bạn', 'devvn' ); ?>" /></p><?php // @codingStandardsIgnoreLine ?>
<div class="clear"></div>
<?php
do_action( 'woocommerce_order_tracking_form' );
?>
<p class="form-row"><button type="submit" class="button<?php echo esc_attr( wc_wp_theme_get_element_class_name( 'button' ) ? ' ' . wc_wp_theme_get_element_class_name( 'button' ) : '' ); ?>" name="track" value="<?php esc_attr_e( 'Theo dõi', 'devvn' ); ?>"><?php esc_html_e( 'Theo dõi', 'devvn' ); ?></button></p>
<?php wp_nonce_field( 'woocommerce-order_tracking', 'woocommerce-order-tracking-nonce' ); ?>
<?php
do_action( 'woocommerce_order_tracking_form_end' );
?>
</form>
<?php
return ob_get_clean();
});
}, 20);
Okie vậy là xong rồi nhé. Kiểm tra thử thôi nào!
Vấn đề mở rộng
Nếu khách chưa đăng nhập thì lúc theo dõi đơn hàng chỉ hiện ra thông tin sản phẩm chứ không hiển thị đầy đủ thông tin như địa chỉ, số điện thoại… của khách. Như hình dưới
Và bạn muốn hiện chúng lên khi khách chưa login thì chỉ cần thêm code sau vào wp-content/themes/{your-theme}/functions.php là được nhé
add_action('woocommerce_after_order_details', function ($order){
$show_customer_details = is_user_logged_in() && $order->get_user_id() === get_current_user_id();
if ( !$show_customer_details ) {
wc_get_template( 'order/order-details-customer.php', array( 'order' => $order ) );
}
});
Ổn rồi. Chúc các bạn thành công và được như ý nha!
- Bình luận