
Danh sách các hàm điều kiện (conditional tags) trong WooCommerce
Sơ đồ trang
Conditional Tags (Hàm điều kiện) trong WooCommerce là những hàm PHP đặc biệt cho phép bạn thực hiện các hành động hoặc hiển thị nội dung khác nhau dựa trên các điều kiện cụ thể. Chúng giúp bạn tùy chỉnh trang web một cách linh hoạt và hiệu quả.

Cách sử dụng Conditional Logic
Cấu trúc cơ bản
add_action( 'woocommerce_before_single_product', 'your_function_name' );
function your_function_name() {
if ( condition_check() ) {
// Thực hiện hành động khi điều kiện đúng
echo 'Nội dung hiển thị';
}
}
Ví dụ thực tế
add_action( 'woocommerce_before_single_product', 'display_product_notice' );
function display_product_notice() {
global $product;
if ( 25 === $product->get_id() ) {
echo '<div class="product-notice">Sản phẩm đặc biệt!</div>';
}
}
1. Conditional Tags cho Trang Sản phẩm Đơn (Single Product Page)
Kiểm tra có phải trang sản phẩm đơn
// Sử dụng is_product()
if ( is_product() ) {
echo 'Đây là trang sản phẩm đơn';
}
// Sử dụng is_single() cho WooCommerce
if ( is_single() && is_product() ) {
echo 'Đây là trang sản phẩm đơn';
}
Kiểm tra ID sản phẩm cụ thể
// Kiểm tra một ID
if ( is_single( '17' ) ) {
echo 'Sản phẩm có ID 17';
}
// Kiểm tra nhiều ID
if ( is_single( array( '17', '25', '30' ) ) ) {
echo 'Một trong các sản phẩm được chọn';
}
Kiểm tra danh mục sản phẩm
// Kiểm tra theo slug danh mục
if ( has_term( 'chairs', 'product_cat' ) ) {
echo 'Sản phẩm thuộc danh mục ghế';
}
// Kiểm tra theo ID danh mục
if ( has_term( 123, 'product_cat' ) ) {
echo 'Sản phẩm thuộc danh mục có ID 123';
}
// Kiểm tra nhiều danh mục
if ( has_term( array( 'chairs', 'tables' ), 'product_cat' ) ) {
echo 'Sản phẩm thuộc danh mục ghế hoặc bàn';
}
Kiểm tra thẻ sản phẩm
// Kiểm tra theo slug thẻ
if ( has_term( 'blue', 'product_tag' ) ) {
echo 'Sản phẩm có thẻ màu xanh';
}
// Kiểm tra nhiều thẻ
if ( has_term( array( 'blue', 'red' ), 'product_tag' ) ) {
echo 'Sản phẩm có thẻ màu xanh hoặc đỏ';
}
Kiểm tra tình trạng sản phẩm
global $product;
// Kiểm tra sản phẩm đang giảm giá
if ( $product->is_on_sale() ) {
echo 'Sản phẩm đang giảm giá';
}
// Kiểm tra loại sản phẩm
if ( $product->is_type( 'simple' ) ) {
echo 'Sản phẩm đơn giản';
} elseif ( $product->is_type( 'variable' ) ) {
echo 'Sản phẩm có biến thể';
} elseif ( $product->is_type( 'grouped' ) ) {
echo 'Sản phẩm nhóm';
} elseif ( $product->is_type( 'external' ) ) {
echo 'Sản phẩm bên ngoài';
}
// Kiểm tra sản phẩm ảo
if ( $product->is_virtual() ) {
echo 'Sản phẩm ảo';
}
// Kiểm tra sản phẩm có thể tải xuống
if ( $product->is_downloadable() ) {
echo 'Sản phẩm có thể tải xuống';
}
// Kiểm tra tình trạng kho
if ( $product->is_in_stock() ) {
echo 'Còn hàng';
} else {
echo 'Hết hàng';
}
// Kiểm tra sản phẩm có được bán không
if ( $product->is_purchasable() ) {
echo 'Có thể mua';
}
Kiểm tra trong phần sản phẩm liên quan
add_filter( 'woocommerce_variable_price_html', 'hide_price_on_related', 10, 2 );
function hide_price_on_related( $price ) {
global $woocommerce_loop;
if ( is_product() && isset( $woocommerce_loop['name'] ) && $woocommerce_loop['name'] == 'related' ) {
$price = '';
}
return $price;
}
2. Conditional Tags cho Trang Shop và Danh mục
Kiểm tra trang Shop chính
if ( is_shop() ) {
echo 'Đây là trang shop chính';
}
Kiểm tra trang danh mục sản phẩm
// Trang danh mục bất kỳ
if ( is_product_category() ) {
echo 'Đây là trang danh mục sản phẩm';
}
// Danh mục cụ thể
if ( is_product_category( 'shirts' ) ) {
echo 'Đây là trang danh mục áo sơ mi';
}
// Nhiều danh mục
if ( is_product_category( array( 'shirts', 'pants' ) ) ) {
echo 'Đây là trang danh mục áo sơ mi hoặc quần';
}
Kiểm tra trang thẻ sản phẩm
// Trang thẻ bất kỳ
if ( is_product_tag() ) {
echo 'Đây là trang thẻ sản phẩm';
}
// Thẻ cụ thể
if ( is_product_tag( 'red' ) ) {
echo 'Đây là trang thẻ màu đỏ';
}
// Nhiều thẻ
if ( is_product_tag( array( 'red', 'blue' ) ) ) {
echo 'Đây là trang thẻ màu đỏ hoặc xanh';
}
Kiểm tra trong vòng lặp sản phẩm
add_action( 'woocommerce_after_shop_loop_item', 'custom_product_loop_text' );
function custom_product_loop_text() {
if ( has_term( 'featured', 'product_tag' ) ) {
echo '<span class="featured-badge">Nổi bật</span>';
}
}
3. Conditional Tags cho các Trang WooCommerce khác
Kiểm tra trang WooCommerce
if ( is_woocommerce() ) {
echo 'Đây là trang WooCommerce';
}
Kiểm tra trang Giỏ hàng
if ( is_cart() ) {
echo 'Đây là trang giỏ hàng';
}
Kiểm tra trang Thanh toán
if ( is_checkout() ) {
echo 'Đây là trang thanh toán';
}
// Kiểm tra trang thanh toán đơn hàng cụ thể
if ( is_checkout_pay_page() ) {
echo 'Đây là trang thanh toán đơn hàng';
}
Kiểm tra trang Tài khoản
if ( is_account_page() ) {
echo 'Đây là trang tài khoản khách hàng';
}
Kiểm tra các endpoint
// Endpoint chung
if ( is_wc_endpoint_url() ) {
echo 'Đây là một endpoint WooCommerce';
}
// Endpoint cụ thể
if ( is_wc_endpoint_url( 'order-received' ) ) {
echo 'Trang cảm ơn sau khi đặt hàng';
}
if ( is_wc_endpoint_url( 'view-order' ) ) {
echo 'Trang xem chi tiết đơn hàng';
}
if ( is_wc_endpoint_url( 'edit-account' ) ) {
echo 'Trang chỉnh sửa tài khoản';
}
if ( is_wc_endpoint_url( 'edit-address' ) ) {
echo 'Trang chỉnh sửa địa chỉ';
}
if ( is_wc_endpoint_url( 'orders' ) ) {
echo 'Trang danh sách đơn hàng';
}
if ( is_wc_endpoint_url( 'downloads' ) ) {
echo 'Trang tải xuống';
}
4. Conditional Tags Nâng cao
Kiểm tra yêu cầu AJAX
if ( wp_doing_ajax() || is_ajax() ) {
echo 'Đây là yêu cầu AJAX';
}
Kiểm tra người dùng đã đăng nhập
if ( is_user_logged_in() ) {
echo 'Người dùng đã đăng nhập';
} else {
echo 'Người dùng chưa đăng nhập';
}
Kiểm tra role người dùng
if ( current_user_can( 'manage_woocommerce' ) ) {
echo 'Người dùng có quyền quản lý WooCommerce';
}
if ( wc_current_user_has_role( 'customer' ) ) {
echo 'Người dùng là khách hàng';
}
Kiểm tra trạng thái đơn hàng
// Trong context có $order
if ( $order && $order->has_status( 'completed' ) ) {
echo 'Đơn hàng đã hoàn thành';
}
// Kiểm tra nhiều trạng thái
if ( $order && $order->has_status( array( 'processing', 'completed' ) ) ) {
echo 'Đơn hàng đang xử lý hoặc đã hoàn thành';
}
Kiểm tra phương thức thanh toán
// Trong context có $order
if ( $order && 'cod' === $order->get_payment_method() ) {
echo 'Thanh toán khi nhận hàng';
}
Kiểm tra thiết bị di động
if ( wp_is_mobile() ) {
echo 'Đang sử dụng thiết bị di động';
}
5. Ví dụ Thực tế Tổng hợp
Ví dụ 1: Hiển thị thông báo tùy theo trang
add_action( 'woocommerce_before_main_content', 'display_page_notices' );
function display_page_notices() {
if ( is_shop() ) {
echo '<div class="shop-notice">Chào mừng đến cửa hàng của chúng tôi!</div>';
} elseif ( is_product_category( 'electronics' ) ) {
echo '<div class="category-notice">Khám phá các sản phẩm điện tử mới nhất!</div>';
} elseif ( is_product_tag( 'sale' ) ) {
echo '<div class="sale-notice">Sản phẩm đang giảm giá đặc biệt!</div>';
} elseif ( is_cart() ) {
echo '<div class="cart-notice">Kiểm tra lại giỏ hàng trước khi thanh toán.</div>';
}
}
Ví dụ 2: Tùy chỉnh theo loại sản phẩm
add_action( 'woocommerce_single_product_summary', 'custom_product_info', 25 );
function custom_product_info() {
global $product;
if ( ! is_product() ) return;
if ( $product->is_virtual() && $product->is_downloadable() ) {
echo '<div class="digital-product-info">Sản phẩm số - Tải xuống ngay sau khi thanh toán</div>';
} elseif ( $product->is_type( 'variable' ) ) {
echo '<div class="variable-product-info">Vui lòng chọn tùy chọn sản phẩm</div>';
} elseif ( $product->is_on_sale() ) {
$sale_price = $product->get_sale_price();
$regular_price = $product->get_regular_price();
$saved_amount = $regular_price - $sale_price;
echo '<div class="sale-info">Bạn tiết kiệm: ' . wc_price( $saved_amount ) . '</div>';
}
}
Ví dụ 3: Điều kiện phức tạp
add_action( 'woocommerce_after_single_product_summary', 'advanced_product_recommendations', 25 );
function advanced_product_recommendations() {
global $product;
if ( ! is_product() ) return;
// Kiểm tra nhiều điều kiện
if ( has_term( 'electronics', 'product_cat' ) &&
$product->is_in_stock() &&
! $product->is_on_sale() &&
is_user_logged_in() ) {
echo '<div class="member-recommendation">';
echo '<h3>Gợi ý dành cho thành viên</h3>';
echo '<p>Bạn có thể quan tâm đến các sản phẩm điện tử khác...</p>';
echo '</div>';
}
}
6. Best Practices và Lưu ý
Performance Tips
// Cache kết quả để tránh gọi lặp lại
function is_product_in_category( $category_slug ) {
static $cache = array();
if ( ! isset( $cache[ $category_slug ] ) ) {
$cache[ $category_slug ] = has_term( $category_slug, 'product_cat' );
}
return $cache[ $category_slug ];
}
Kiểm tra tồn tại của hàm
// Luôn kiểm tra hàm có tồn tại trước khi sử dụng
if ( function_exists( 'is_woocommerce' ) && is_woocommerce() ) {
// Code của bạn
}
Sử dụng global variables một cách an toàn
function safe_product_check() {
global $product;
// Kiểm tra $product có tồn tại và là object WC_Product
if ( ! $product || ! is_a( $product, 'WC_Product' ) ) {
return false;
}
return $product->is_on_sale();
}
Kết luận
Conditional Tags trong WooCommerce là công cụ mạnh mẽ giúp bạn tạo ra các tùy chỉnh linh hoạt và thông minh cho cửa hàng của mình. Việc nắm vững các hàm này sẽ giúp bạn:
- Tối ưu hóa trải nghiệm người dùng
- Tạo ra các chức năng động và tương tác
- Quản lý nội dung hiệu quả hơn
- Xây dựng các theme và plugin chuyên nghiệp
Hãy thực hành với các ví dụ trên và kết hợp chúng để tạo ra những giải pháp phù hợp với nhu cầu cụ thể của dự án bạn.
Lưu ý: Luôn đặt code tùy chỉnh trong file functions.php
của child theme hoặc trong plugin tùy chỉnh để tránh mất code khi cập nhật theme.
Nếu bạn thấy bài viết có ích bạn có thể chia sẻ bài viết
này.
Bạn có thể yêu cầu thêm bài viết tại đây
Bạn có thể yêu cầu thêm bài viết tại đây
Đã copy