Tóm lại, sử dụng Template Tag là một cách đơn giản để truy vấn thông tin từ cơ sở dữ liệu và hiển thị nó ra bên ngoài trang web của bạn. Ví dụ, chúng ta có thể hiển thị tên của tác giả bài viết ( author ) bằng cách sử dụng the_author();
và sử dụng the_title();
để hiển thị tiêu đề trang hoặc bài viết.
Các Template Tag của WordPress khá là phong phú, cho phép chúng ta thoải mái tùy chỉnh trang web mà không cần đến các plugin của bên thứ ba. Trong hướng dẫn này, mình sẽ chỉ cho bạn cách tạo ra một custom page để hiển thị danh sách author sử dụng một bộ các template tag.
Thêm vào đó, chúng ta cũng sẽ áp dụng phân trang ( pagination ) để hiển thị user trong một danh sách các trang. Một trang như vậy có thể được yêu cầu cho một số dự án web.
Tạo Custom Page Template
Đầu tiên, tạo một file PHP mới trong thư mục theme của bạn ( cái mà đang active đó ). Trong ví dụ này, mình sử dụng theme TwentyTwelve. Thêm vào comment tag như sau để đăng ký nó như một page template.
<?php /* Template Name: User Page */
Trong trang editor, thiết lập nó như template cho trang author của bạn.
Lưu ý: bạn không nên đặt tên tập tin là author.php vì nó đã được bảo vệ bởi WordPress dùng để hiển thị các bài viết lưu trữ của tác giả.
Các Truy Vấn và Công Thức
Hãy thiết lập công thức. Mở cái template mới mà chúng ta vừa tạo ra ở trên.
Đầu tiên, chúng ta cần phải xác định số lượng của user mà chúng ta muốn hiển thị ra trên mỗi trang. Chúng ta thiết lập con số này trong một biến có tên $number
. Bất cứ lúc nào bạn muốn thay đổi số lượng user hiển thị trên trang, hãy thay đổi giá trị trong biến này.
$number = 10;
Thêm đoạn mã sau đây để xác định số lượng phân trang hiện tại.
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
Sau đó, sử dụng đoạn mã sau đây, mục đích là đếm số lượng user đã đi qua trong các trang ( offset ) – điều này sẽ có hiệu lực trong trang thứ hai trở đi.
$offset = ($paged - 1) * $number;
Chúng ta cần phải lấy được các user đã đăng ký trên trang web của chúng ta, và sau đó đếm tổng số bằng cách sử dụng hàm PHP count()
, như sau.
$users = get_users(); $total_users = count($users);
Chúng ta cũng đếm tổng số user được truy vấn, trong đó bao gồm số lượng user sẽ được hiển thị và số lượng offset.
$query = get_users('&offset='.$offset.'&number='.$number);
Sau đó, đếm tổng số trang sẽ được tạo ra. Chúng ta có thể đếm nó dựa trên tổng số user đã đăng ký và số lượng user hiển thị trên mỗi trang, như sau.
$total_pages = intval($total_users / $number) + 1;
[adsense][/adsense]
Hiển Thị Danh Sách User
Như vậy là chúng ta đã thiết lập các công thức cần thiết, bây giờ chúng ta sẽ hiển thị kết quả ra trang.
Trong ví dụ này, chúng ta sẽ hiển thị một vài điều từ user: hình ảnh đại diện ( avatar ), tên đầy đủ và tiểu sử ngắn ( mô tả ). Những thông tin này có thể được lấy tương ứng bằng cách sử dụng các template tag sau: get_avatar
và get_the_author_meta
.
echo '<ul id="users">'; foreach($query as $q) { ?> <li class="user clearfix"> <div class="user-avatar"> <?php echo get_avatar( $q->ID, 80 ); ?> </div> <div class="user-data"> <h4 class="user-name"> <a href="<?php echo get_author_posts_url($q->ID);?>"> <?php echo get_the_author_meta('display_name', $q->ID);?> </a> </h4> <?php if (get_the_author_meta('description', $q->ID) != '') : ?> <p><?php echo get_the_author_meta('description', $q->ID); ?></p> <?php endif; ?> </div> </li> <?php } echo '</ul>';
Tạo Phân Trang ( Pagination )
Chắc chắn chúng ta không muốn hiển thị hàng trăm user trên cùng một trang duy nhất. Vì vậy, chúng ta sẽ tạo ra các liên kết phân trang và phân chia các kết quả trong nhiều trang. Thêm vào đó, chúng ta sẽ chỉ hiển thị số trang nếu tổng user đã đăng ký lớn hơn số lượng user đang được hiển thị trên mỗi trang.
Thật may, WordPress có một template tag cho phép chúng ta tạo ra số trang dễ dàng, được gọi là paginate_links()
.
<?php if ($total_users > $total_query) { echo '<div id="pagination" class="clearfix">'; echo '<span class="pages">Pages:</span>'; $current_page = max(1, get_query_var('paged')); echo paginate_links(array( 'base' => get_pagenum_link(1) . '%_%', 'format' => 'page/%#%/', 'current' => $current_page, 'total' => $total_pages 'prev_next' => false, 'type' => 'list', )); echo '</div>'; } ?>
Đoạn Code Đầy Đủ
Đây là tất cả các đoạn code mà bạn chỉ cần copy và paste vào trong page template của bạn.
<?php $number = 10; $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $offset = ($paged - 1) * $number; $users = get_users(); $query = get_users('&offset='.$offset.'&number='.$number); $total_users = count($users); $total_query = count($query); $total_pages = intval($total_users / $number) + 1; echo '<ul id="users">'; foreach($query as $q) { ?> <li class="user clearfix"> <div class="user-avatar"> <?php echo get_avatar( $q->ID, 80 ); ?> </div> <div class="user-data"> <h4 class="user-name"> <a href="<?php echo get_author_posts_url($q->ID);?>"> <?php echo get_the_author_meta('display_name', $q->ID);?> </a> </h4> <?php if (get_the_author_meta('description', $q->ID) != '') : ?> <p><?php echo get_the_author_meta('description', $q->ID); ?></p> <?php endif; ?> </div> </li> <?php } echo '</ul>'; ?> <?php if ($total_users > $total_query) { echo '<div id="pagination" class="clearfix">'; echo '<span class="pages">Pages:</span>'; $current_page = max(1, get_query_var('paged')); echo paginate_links(array( 'base' => get_pagenum_link(1) . '%_%', 'format' => 'page/%#%/', 'current' => $current_page, 'total' => $total_pages, 'prev_next' => false, 'type' => 'list', )); echo '</div>'; ?>Download Source Code
Với một vài tinh chỉnh trong CSS, bạn có thể làm cho trang trông đẹp hơn.