
Danh sách các hàm điều kiện hay dùng trong WordPress
Sơ đồ trang
- Tags điều kiện hay hàm điều kiện là gì?
- Cách Tags điều kiện hoạt động trong WordPress
- Danh sách Tags điều kiện WordPress
- is_front_page
- is_home
- is_admin
- is_network_admin
- is_admin_bar_showing
- is_single
- is_sticky
- is_post_type_hierarchical
- is_post_type_archive
- comments_open
- pings_open
- is_page
- is_page_template
- is_category
- is_tag
- is_tax
- has_term
- term_exists
- is_taxonomy_hierarchical
- taxonomy_exists
- is_author
- Các điều kiện liên quan đến thời gian
- is_archive
- is_search
- is_404
- is_paged
- is_attachment
- wp_attachment_is_image
- is_local_attachment
- is_singular
- post_type_exists
- is_main_query
- is_feed
- is_trackback
- is_preview
- in_the_loop
- is_dynamic_sidebar
- is_active_sidebar
- is_active_widget
- is_blog_installed
- is_rtl
- is_multisite
- is_main_site
- is_super_admin
- is_user_logged_in
- email_exists
- username_exists
- is_plugin_active
- is_plugin_inactive
- is_plugin_active_for_network
- is_child_theme
- current_theme_supports
- has_post_thumbnail
- wp_script_is
- is_privacy_policy
- has_excerpt
- has_nav_menu
- Các ứng dụng thực tế của Conditional Tags
- Mẹo sử dụng nâng cao
- Các lỗi thường gặp và cách khắc phục
- Kết luận
Tags điều kiện hay hàm điều kiện là gì?
Hàm điều kiện trong WordPress là các hàm có kiểu dữ liệu boolean (đúng/sai) được sử dụng trong các Template Files để thay đổi cách hiển thị nội dung dựa trên các điều kiện mà trang hiện tại đáp ứng. Chúng thông báo cho WordPress biết nên hiển thị đoạn mã nào trong những điều kiện cụ thể.
Có nhiều tags điều kiện cho các khu vực khác nhau trên website của bạn như trang chủ, bài viết, trang, và một số tags điều kiện tùy chỉnh như tags điều kiện WooCommerce. Điều này cho phép bạn thay đổi những gì được hiển thị trên khắp website và các trang của bạn.
Ví dụ, bạn có thể thay đổi logo website ở các khu vực khác nhau bằng cách sử dụng tags điều kiện.
Cách Tags điều kiện hoạt động trong WordPress
Mã bắt đầu bằng việc kiểm tra xem một điều kiện có đúng hay sai. Nếu điều kiện được xác định là đúng, đoạn mã đầu tiên sẽ được thực thi. Nếu sai, đoạn mã đầu tiên sẽ bị bỏ qua và đoạn mã thứ hai (sau else) sẽ được thực thi. Những tags này có thể được kết hợp với câu lệnh “if” trong PHP để thực thi mã theo điều kiện.
Danh sách Tags điều kiện WordPress
is_front_page
Xác định liệu truy vấn có phải là cho trang chủ của website hay không.
if ( is_front_page() ) :
// đúng là trang chủ
else :
// nếu không phải trang chủ
endif;
is_home
Xác định liệu truy vấn có phải là cho trang blog chính hay không.
if ( is_home() ) {
// Đây là trang hiển thị bài viết blog
get_sidebar( 'blog' );
} else {
// Đây không phải trang hiển thị bài viết blog
get_sidebar();
}
is_admin
Xác định liệu yêu cầu hiện tại có phải cho trang giao diện quản trị hay không.
Bài viết liên quan
if ( ! is_admin() ) {
echo "Bạn đang xem giao diện theme";
} else {
echo "Bạn đang xem Bảng quản trị WordPress";
}
is_network_admin
Xác định liệu yêu cầu hiện tại có phải cho giao diện quản trị mạng hay không.
if ( is_network_admin() ) {
echo __( 'Bạn đang xem trang quản trị mạng WordPress', 'textdomain' );
} else {
echo __( 'Bạn không đang xem trang quản trị mạng WordPress', 'textdomain' );
}
is_admin_bar_showing
Xác định liệu thanh quản trị có nên được hiển thị hay không.
if ( is_admin_bar_showing() ) {
// thực hiện một điều gì đó
}
is_single
Xác định liệu truy vấn có phải là cho một bài viết đơn lẻ đang tồn tại hay không.
is_single();
// Khi trang bài viết đơn được hiển thị.
is_single('17');
// Khi bài viết có ID 17 được hiển thị.
is_single(17);
// Khi bài viết có ID 17 được hiển thị. Tham số kiểu số nguyên cũng hoạt động.
is_single('Món hầm Ireland');
// Khi bài viết có post_title là "Món hầm Ireland" được hiển thị.
is_single('mon-ham-bo');
// Khi bài viết có post_name (slug) là "mon-ham-bo" được hiển thị.
is_single(array(17,'mon-ham-bo','Món hầm Ireland'));
// Trả về true khi bài viết đơn đang hiển thị là bài viết có ID 17,
// hoặc có post_name là "mon-ham-bo", hoặc có post_title là "Món hầm Ireland".
// Lưu ý: Khả năng sử dụng mảng được thêm vào từ phiên bản 2.5.
is_sticky
Xác định liệu một bài viết có được ghim hay không.
is_sticky();
// Khi bất kỳ trang Bài viết ghim nào được hiển thị.
is_sticky('17');
// Khi Bài viết ghim có ID 17 được hiển thị.
is_post_type_hierarchical
Xác định liệu loại bài viết có phân cấp hay không.
is_post_type_archive
Xác định liệu truy vấn có phải là cho một trang lưu trữ loại bài viết đang tồn tại hay không.
<?php if ( is_post_type_archive() ) { ?>
<h1><?php post_type_archive_title(); ?></h1>
<?php } ?>
<?php
function my_function( $query ){
if ( is_post_type_archive( 'my_custom_post_type' ) ) {
// Làm điều gì đó
}
}
add_action( 'pre_get_posts', 'my_function' );
?>
comments_open
Xác định liệu bài viết hiện tại có mở cho bình luận hay không.
/**
* Enqueue wpdocs_script nếu đang xem bài viết với bình luận được bật.
*/
function wpdocs_scripts(){
if ( is_single() && comments_open() ) {
// wpdocs_script phải được đăng ký trước đó thông qua wp_register_script()
wp_enqueue_script( 'wpdocs_script' );
}
}
add_action( 'wp_print_scripts', 'wpdocs_scripts' );
pings_open
Xác định liệu bài viết hiện tại có mở cho pings hay không.
is_page
Xác định liệu truy vấn có phải là cho một trang đơn lẻ đang tồn tại hay không.
// Khi bất kỳ Trang đơn nào được hiển thị.
is_page();
// Khi Trang có ID 42 được hiển thị.
is_page( 42 );
// Khi Trang có post_title là "Liên hệ" được hiển thị.
is_page( 'Liên hệ' );
// Khi Trang có post_name (slug) là "gioi-thieu" được hiển thị.
is_page( 'gioi-thieu' );
/*
* Trả về true khi Trang được hiển thị có ID 42,
* hoặc post_name là "gioi-thieu", hoặc post_title là "Liên hệ".
* Lưu ý: Khả năng sử dụng mảng được thêm vào từ phiên bản 2.5.
*/
is_page( array( 42, 'gioi-thieu', 'Liên hệ' ) );
is_page_template
Xác định liệu hiện tại đang ở trong một template trang hay không.
if ( is_page_template( 'about.php' ) ) {
// about.php đang được sử dụng
} else {
// about.php không được sử dụng
}
if ( is_page_template( 'directory-name/page-about.php' ) ) {
// about.php đang được sử dụng
} else {
// about.php không được sử dụng
}
if ( is_page_template( array( 'template-full-width.php', 'template-product-offers.php' ) ) ) {
// Làm điều gì đó nếu một trong các template trên đang được sử dụng
}
else {
// Ngược lại làm điều này
}
is_category
Xác định liệu truy vấn có phải là cho một trang lưu trữ danh mục đang tồn tại hay không.
is_category();
// Khi bất kỳ trang lưu trữ Danh mục nào được hiển thị.
is_category( '9' );
// Khi trang lưu trữ Danh mục 9 được hiển thị.
is_category( 'Pho mát thơm' );
// Khi trang lưu trữ Danh mục có Tên là "Pho mát thơm" được hiển thị.
is_category( 'pho-mat-xanh' );
// Khi trang lưu trữ Danh mục có Slug là "pho-mat-xanh" được hiển thị.
is_category( array( 9, 'pho-mat-xanh', 'Pho mát thơm' ) );
// Trả về true khi danh mục của bài viết đang hiển thị là term_ID 9,
// hoặc slug "pho-mat-xanh", hoặc tên "Pho mát thơm".
// Lưu ý: Khả năng sử dụng mảng được thêm vào từ phiên bản 2.5.
is_tag
Xác định liệu truy vấn có phải là cho một trang lưu trữ thẻ đang tồn tại hay không.
// Khi bất kỳ trang lưu trữ Thẻ nào được hiển thị.
is_tag();
// Khi trang lưu trữ cho Thẻ 30 được hiển thị.
is_tag( '30' );
// Khi trang lưu trữ cho thẻ có Slug là 'cuc-ky' được hiển thị.
is_tag( 'cuc-ky' );
// Khi trang lưu trữ cho thẻ có Tên là 'nhe-nhang' được hiển thị.
is_tag( 'nhe-nhang' );
/*
* Trả về true khi thẻ của bài viết đang hiển thị là term_ID 30,
* hoặc slug "cuc-ky", hoặc tên "nhe-nhang". Lưu ý: Khả năng sử dụng mảng được thêm vào
* từ phiên bản 3.7.
*/
is_tag( array( 30, 'nhe-nhang', 'cuc-ky' ) );
is_tax
Xác định liệu truy vấn có phải là cho một trang lưu trữ taxonomy tùy chỉnh đang tồn tại hay không.
is_tax();
// Khi bất kỳ trang lưu trữ taxonomy tùy chỉnh nào được hiển thị.
is_tax( 'kenh' );
// Khi trang lưu trữ cho taxonomy 'kenh' được hiển thị.
is_tax( 'kenh', 'VTV1' );
// Khi trang lưu trữ cho taxonomy 'kenh' được hiển thị
// và term của taxonomy 'kenh' là 'VTV1'.
has_term
Kiểm tra xem bài viết hiện tại có bất kỳ term nào trong số các term đã cho hay không.
if( has_term( 'jazz', 'the-loai' ) ) {
// làm điều gì đó
}
term_exists
Xác định liệu một term taxonomy có tồn tại hay không.
$term = term_exists( 'Chưa phân loại', 'category' );
if ( $term !== 0 && $term !== null ) {
echo __( "Danh mục 'Chưa phân loại' tồn tại!", "textdomain" );
}
is_taxonomy_hierarchical
Xác định liệu đối tượng taxonomy có phân cấp hay không.
taxonomy_exists
Xác định liệu tên taxonomy có tồn tại hay không.
$taxonomy_exist = taxonomy_exists( 'category' );
// Trả về true
$taxonomy_exist = taxonomy_exists( 'post_tag' );
// Trả về true
$taxonomy_exist = taxonomy_exists( 'link_category' );
// Trả về true
$taxonomy_exist = taxonomy_exists( 'my_taxonomy' );
// Trả về false nếu global $wp_taxonomies['my_taxonomy'] không được thiết lập
is_author
Xác định liệu truy vấn có phải là cho một trang lưu trữ tác giả đang tồn tại hay không.
is_author();
// Khi bất kỳ trang Tác giả nào được hiển thị.
is_author('4');
// Khi trang lưu trữ cho Tác giả số (ID) 4 được hiển thị.
is_author('Vivian');
// Khi trang lưu trữ cho Tác giả có biệt danh "Vivian" được hiển thị.
is_author('john-jones');
// Khi trang lưu trữ cho Tác giả có Nicename "john-jones" được hiển thị.
is_author(array(4,'john-jones','Vivian'));
// Khi trang lưu trữ cho tác giả là user ID 4, hoặc user_nicename "john-jones",
// hoặc biệt danh "Vivian". Lưu ý: Khả năng sử dụng mảng được thêm vào từ phiên bản 2.5.
Các điều kiện liên quan đến thời gian
is_date
Xác định liệu truy vấn có phải là cho một trang lưu trữ ngày đang tồn tại hay không.
if ( is_date() ) {
// Làm điều gì đó tuyệt vời.
}
is_year
Xác định liệu truy vấn có phải là cho một trang lưu trữ năm đang tồn tại hay không.
if ( is_year() ) {
// Làm điều gì đó tuyệt vời.
}
is_month
Xác định liệu truy vấn có phải là cho một trang lưu trữ tháng đang tồn tại hay không.
if ( is_month() ) {
// Làm điều gì đó tuyệt vời.
}
is_day
Xác định liệu truy vấn có phải là cho một trang lưu trữ ngày đang tồn tại hay không.
if ( is_day() ) {
// Làm điều gì đó tuyệt vời.
}
is_time
Xác định liệu truy vấn có phải là cho một thời gian cụ thể hay không.
if ( is_time() ) {
// Làm điều gì đó tuyệt vời.
}
is_new_day
Xác định liệu ngày xuất bản của bài viết hiện tại trong vòng lặp có khác với ngày xuất bản của bài viết trước đó trong vòng lặp hay không.
is_archive
Xác định liệu truy vấn có phải là cho một trang lưu trữ đang tồn tại hay không.
if(is_archive())
// viết mã của bạn tại đây ...
is_search
Xác định liệu truy vấn có phải là cho một tìm kiếm hay không.
if ( is_search() ) {
// thêm form tìm kiếm bên ngoài (Google, Yahoo, Bing...)
}
is_404
Xác định liệu truy vấn có dẫn đến lỗi 404 (không trả về kết quả) hay không.
if ( is_404() ) {
// thêm form tìm kiếm để người dùng có thể tìm kiếm các bài viết khác
}
is_paged
Xác định liệu truy vấn có phải là cho một kết quả được phân trang và không phải cho trang đầu tiên hay không.
is_attachment
Xác định liệu truy vấn có phải là cho một trang đính kèm đang tồn tại hay không.
if ( is_attachment() ) {
// hiển thị quảng cáo #1
} else {
// hiển thị quảng cáo #2
}
wp_attachment_is_image
Xác định liệu một file đính kèm có phải là hình ảnh hay không.
$id = 37;
if ( wp_attachment_is_image( $id ) ) {
printf( 'Bài viết %d là một hình ảnh!', $id );
} else {
printf( 'Bài viết %d không phải là hình ảnh.', $id );
}
is_local_attachment
Xác định liệu một URI đính kèm có phải là nội bộ và thực sự là một file đính kèm hay không.
is_singular
Xác định liệu truy vấn có phải là cho một bài viết đơn lẻ đang tồn tại của bất kỳ loại bài viết nào (post, attachment, page, custom post types).
if ( is_singular() ) {
// hiển thị quảng cáo #1
} else {
// hiển thị quảng cáo #2
}
is_singular( 'book' );
is_singular( array( 'newspaper', 'book' ) );
post_type_exists
Xác định liệu một loại bài viết có được đăng ký hay không.
$exists = post_type_exists( 'post' );
// trả về true
$exists = post_type_exists( 'page' );
// trả về true
$exists = post_type_exists( 'book' );
// trả về true nếu book là một loại bài viết đã đăng ký
$exists = post_type_exists( 'xyz' );
// trả về false nếu xyz không phải là một loại bài viết đã đăng ký
is_main_query
Xác định liệu truy vấn có phải là truy vấn chính hay không.
/**
* Nếu truy vấn toàn cục là cho một danh mục, loại trừ danh mục 5.
*
* @param WP_Query $query Thể hiện WP_Query toàn cục.
*/
function wpdocs_modify_query_exclude_category( $query ) {
if ( ! is_admin() && $query->is_main_query() && ! $query->get( 'cat' ) )
$query->set( 'cat', '-5' );
}
add_action( 'pre_get_posts', 'wpdocs_modify_query_exclude_category' );
is_feed
Xác định liệu truy vấn có phải là cho một feed hay không.
is_trackback
Xác định liệu truy vấn có phải là cho một cuộc gọi endpoint trackback hay không.
is_preview
Xác định liệu truy vấn có phải là cho một bản xem trước bài viết hoặc trang hay không.
function comments_template( $file = '/comments.php', $separate_comments = false ) {
global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_ID, $user_identity, $overridden_cpage;
if ( ! ( is_single() || is_page() || $withcomments ) || empty( $post ) ) {
return;
}
if ( is_preview() ) {
return;
}
in_the_loop
Xác định liệu người gọi có đang trong Vòng lặp hay không.
function wpdocs_modify_single_post_entry_titles( $title ) {
if ( is_singular( 'post' ) && in_the_loop() ) {
/* Chỉnh sửa $title */
}
return $title;
}
add_filter( 'the_title', 'wpdocs_modify_single_post_entry_titles' );
is_dynamic_sidebar
Xác định liệu thanh bên động có được bật và sử dụng bởi theme hay không.
is_active_sidebar
Xác định liệu một thanh bên có chứa widgets hay không.
<?php if ( is_active_sidebar( 'left-sidebar' ) ) { ?>
<ul id="sidebar">
<?php dynamic_sidebar( 'left-sidebar' ); ?>
</ul>
<?php } ?>
is_active_widget
Xác định liệu một widget đã cho có được hiển thị ở front-end hay không.
is_blog_installed
Xác định liệu WordPress đã được cài đặt hay chưa.
is_rtl
Xác định liệu ngôn ngữ hiện tại có phải là từ phải sang trái (RTL) hay không.
if ( is_rtl() ) {
wp_enqueue_style( 'style-rtl', plugins_url( '/css/style-rtl.css', __FILE__ ) );
wp_enqueue_script( 'script-rtl', plugins_url( '/js/script-rtl.js', __FILE__ ) );
}
is_multisite
Kiểm tra nếu Multisite được bật.
is_main_site
Xác định liệu một site có phải là site chính của mạng hiện tại hay không.
if ( is_main_site( $blog_id ) ) {
// hiển thị điều gì đó đặc biệt cho site chính.
}
is_super_admin
Xác định xem người dùng có phải là admin site hay không.
// Xóa menu "Edit" cho người dùng không phải là Super Admins của mạng multisite
if ( ! is_super_admin() ) {
add_action( 'admin_init', 'wpdocs_remove_edit_menu' );
}
/**
* Xóa liên kết chỉnh sửa hồ sơ cho người dùng không phải super admin.
*/
function wpdocs_remove_edit_menu() {
remove_menu_page('edit.php');
}
is_user_logged_in
Xác định liệu khách truy cập hiện tại có phải là người dùng đã đăng nhập hay không.
if ( is_user_logged_in() ) {
echo 'Chào mừng, người dùng đã đăng ký!';
} else {
echo 'Chào mừng, khách truy cập!';
}
email_exists
Xác định liệu email đã cho có tồn tại hay không.
$email = 'myemail@example.com';
$exists = email_exists( $email );
if ( $exists ) {
echo "Email đó đã được đăng ký cho người dùng số " . $exists;
} else {
echo "Email đó không thuộc về bất kỳ người dùng đã đăng ký nào trên site này";
}
username_exists
Xác định liệu tên người dùng đã cho có tồn tại hay không.
$username = sanitize_user( $_POST['username'] );
if ( username_exists( $username ) ) {
echo "Tên người dùng đang được sử dụng!";
} else {
echo "Tên người dùng chưa được sử dụng!";
}
is_plugin_active
Xác định liệu một plugin có đang hoạt động hay không.
/**
* Phát hiện plugin. Chỉ để sử dụng trên Front End.
*/
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
// kiểm tra plugin bằng cách sử dụng tên plugin
if ( is_plugin_active( 'plugin-directory/plugin-file.php' ) ) {
//plugin đã được kích hoạt
}
is_plugin_inactive
Xác định liệu plugin có không hoạt động hay không.
if ( ! function_exists( 'is_plugin_inactive' ) ) {
require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
}
if ( is_plugin_inactive( 'plugin-directory/plugin-file.php' ) ) {
//plugin không được kích hoạt
}
is_plugin_active_for_network
Xác định liệu plugin có đang hoạt động cho toàn bộ mạng hay không.
if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
}
if ( is_plugin_active_for_network( 'plugin-directory/plugin-file.php' ) ) {
// Plugin đã được kích hoạt
}
is_child_theme
Xác định liệu một child theme có đang được sử dụng hay không.
current_theme_supports
Kiểm tra sự hỗ trợ của theme cho một tính năng đã cho.
if (current_theme_supports('custom-header')) {
// làm điều gì đó đặc biệt khi custom-header được hỗ trợ...
}
has_post_thumbnail
Xác định liệu một bài viết có hình ảnh đính kèm hay không.
if ( has_post_thumbnail() ) {
the_post_thumbnail();
}
else {
echo '<img src="' . get_bloginfo( 'stylesheet_directory' )
. '/images/thumbnail-default.jpg" />';
}
wp_script_is
Xác định liệu một script đã được thêm vào hàng đợi hay chưa.
$handle = 'fluidVids.js';
$list = 'enqueued';
if (wp_script_is( $handle, $list )) {
return;
} else {
wp_register_script( 'fluidVids.js', plugin_dir_url(__FILE__).'js/fluidvids.min.js');
wp_enqueue_script( 'fluidVids.js' );
}
is_privacy_policy
Xác định liệu truy vấn có phải là cho trang Chính sách quyền riêng tư hay không.
has_excerpt
Xác định liệu bài viết có đoạn trích tùy chỉnh hay không.
if ( ! has_excerpt() ) {
echo '';
} else {
the_excerpt();
}
// Lấy $post nếu bạn đang ở trong một hàm.
global $post;
if ( has_excerpt( $post->ID ) ) {
// Bài viết này có đoạn trích.
} else {
// Bài viết này không có đoạn trích.
}
has_nav_menu
Xác định liệu một vị trí menu đã đăng ký có menu được gán cho nó hay không.
if ( has_nav_menu( 'primary' ) ) { wp_nav_menu( array( 'theme_location' => 'primary' ) ); }
Các ứng dụng thực tế của Conditional Tags
1. Tùy chỉnh menu theo từng trang
function custom_menu_by_page() {
if (is_front_page()) {
wp_nav_menu(array('theme_location' => 'home_menu'));
} elseif (is_page('gioi-thieu')) {
wp_nav_menu(array('theme_location' => 'about_menu'));
} elseif (is_singular('product')) {
wp_nav_menu(array('theme_location' => 'product_menu'));
} else {
wp_nav_menu(array('theme_location' => 'primary_menu'));
}
}
2. Hiển thị nội dung khác nhau cho người dùng đã đăng nhập và chưa đăng nhập
function display_user_specific_content() {
if (is_user_logged_in()) {
// Hiển thị nội dung đặc biệt cho người dùng đã đăng nhập
echo '<div class="member-content">';
echo '<h3>Chào mừng thành viên!</h3>';
echo '<p>Đây là nội dung đặc biệt chỉ dành cho thành viên đã đăng nhập.</p>';
echo '</div>';
} else {
// Hiển thị thông báo đăng nhập cho khách
echo '<div class="guest-content">';
echo '<h3>Chào khách!</h3>';
echo '<p>Vui lòng <a href="' . wp_login_url() . '">đăng nhập</a> để xem nội dung đặc biệt.</p>';
echo '</div>';
}
}
3. Thêm CSS khác nhau cho từng loại trang
function add_conditional_styles() {
if (is_single()) {
wp_enqueue_style('single-post-style', get_template_directory_uri() . '/css/single-post.css');
} elseif (is_page()) {
wp_enqueue_style('page-style', get_template_directory_uri() . '/css/page.css');
} elseif (is_archive()) {
wp_enqueue_style('archive-style', get_template_directory_uri() . '/css/archive.css');
}
}
add_action('wp_enqueue_scripts', 'add_conditional_styles');
4. Tùy chỉnh footer theo từng trang
function custom_footer_by_page() {
if (is_front_page()) {
get_template_part('template-parts/footer', 'home');
} elseif (is_page('lien-he')) {
get_template_part('template-parts/footer', 'contact');
} elseif (is_single()) {
get_template_part('template-parts/footer', 'post');
} else {
get_template_part('template-parts/footer', 'default');
}
}
5. Hiển thị bài viết liên quan chỉ trong các bài viết đơn
function display_related_posts() {
if (is_single() && !is_attachment()) {
// Mã để hiển thị bài viết liên quan
echo '<div class="related-posts">';
echo '<h3>Bài viết liên quan</h3>';
// Mã truy vấn bài viết liên quan
echo '</div>';
}
}
Mẹo sử dụng nâng cao
Kết hợp nhiều điều kiện
Bạn có thể kết hợp nhiều conditional tags để tạo ra các điều kiện phức tạp:
if (is_single() && !is_admin() && has_post_thumbnail()) {
// Chỉ thực hiện khi đang ở trang bài viết đơn (không phải trang admin) và bài viết có ảnh đại diện
echo 'Đây là bài viết có ảnh đại diện!';
}
Tạo Conditional Tags tùy chỉnh
Bạn có thể tạo các conditional tags của riêng mình để sử dụng trong theme:
function is_custom_post_type($type) {
global $post;
if ($post && $post->post_type == $type) {
return true;
}
return false;
}
// Sử dụng:
if (is_custom_post_type('san-pham')) {
// Thực hiện điều gì đó cho post type "san-pham"
}
Kiểm tra trang con (subpage)
function is_tree($pid) {
global $post;
if (is_page() && ($post->post_parent == $pid || is_page($pid))) {
return true;
}
return false;
}
// Sử dụng:
if (is_tree(123)) {
// Thực hiện điều gì đó cho trang 123 hoặc bất kỳ trang con nào của nó
}
Kiểm tra trang danh mục con
function is_subcategory() {
$cat = get_query_var('cat');
$category = get_category($cat);
if ($category->parent == 0) {
return false; // Là danh mục gốc
} else {
return true; // Là danh mục con
}
}
// Sử dụng:
if (is_category() && is_subcategory()) {
echo 'Đây là danh mục con!';
}
Kiểm tra loại thiết bị truy cập
Kết hợp với các plugin phát hiện thiết bị di động:
// Giả sử bạn đang sử dụng một plugin phát hiện thiết bị di động
if (is_single() && function_exists('is_mobile') && is_mobile()) {
// Điều chỉnh nội dung cho người dùng di động
echo 'Bạn đang xem bài viết trên thiết bị di động!';
}
Các lỗi thường gặp và cách khắc phục
1. Sử dụng conditional tags quá sớm
Conditional tags chỉ hoạt động sau khi WordPress đã thiết lập truy vấn chính. Sử dụng chúng quá sớm (ví dụ: trong các hooks sớm như plugins_loaded
) sẽ không hoạt động.
Khắc phục: Sử dụng conditional tags trong các hooks muộn hơn như wp
, template_redirect
hoặc wp_head
.
2. Không kiểm tra tính sẵn có của hàm
Một số conditional tags chỉ được tải trong admin area, và việc sử dụng chúng trong front-end mà không kiểm tra có thể gây lỗi.
Khắc phục: Luôn kiểm tra trước khi sử dụng:
if (function_exists('is_plugin_active') && is_plugin_active('my-plugin/my-plugin.php')) {
// Thực hiện điều gì đó
}
3. Sử dụng các điều kiện quá phức tạp
Nếu sử dụng quá nhiều conditional tags lồng nhau, mã của bạn có thể trở nên khó đọc và duy trì.
Khắc phục: Tạo các hàm helper để đơn giản hóa logic:
function should_display_special_banner() {
return is_front_page() && !is_user_logged_in() && !is_admin() && !wp_is_mobile();
}
// Sau đó sử dụng:
if (should_display_special_banner()) {
// Hiển thị banner đặc biệt
}
Kết luận
Các tags điều kiện là công cụ mạnh mẽ trong kho vũ khí của nhà phát triển WordPress. Chúng cho phép bạn tạo ra các trải nghiệm trang web động, phản hồi theo ngữ cảnh, và tùy chỉnh nội dung cho người dùng dựa trên nhiều điều kiện khác nhau.
Bằng cách nắm vững và áp dụng đúng cách các conditional tags, bạn có thể:
- Tạo các giao diện người dùng linh hoạt và thông minh
- Tăng hiệu suất bằng cách chỉ tải các tài nguyên khi cần thiết
- Cá nhân hóa trải nghiệm người dùng dựa trên các yếu tố như vai trò, lịch sử, và thiết bị
- Giải quyết các trường hợp cạnh và ngoại lệ trong theme hoặc plugin của bạn
Khi xây dựng các giải pháp WordPress, hãy luôn xem xét các conditional tags có sẵn trước khi triển khai các giải pháp tùy chỉnh phức tạp.
WordPress đã cung cấp hầu hết các công cụ mà bạn cần để xử lý các trường hợp sử dụng phổ biến.