[WP Tip] Timthumb & featured image
- January 19, 2012
- 27 comments
Trên izwebz thì cũng có bài viết hướng dẫn cách sử dụng featured image để tạo thumbnail rồi. Nhưng trong bài viết này mình sẽ hướng dẫn các bạn kết hợp giữa timthumb và featured image để tạo ra những hình ảnh thumbnail hay sử dụng trong bài viết với kích thước có thể tùy chỉnh một cách thoải mái.
Đây là một mã nguồn mở PHP với chức năng là crop và scale hình ảnh với các định dạng phổ biến như (JPG, PNG, GIF). Timthumb rất dễ dàng để sử dụng cho blog, website và một vài ứng dụng khác. Timthumb được phát triển bới Tim và Darren Hoyts, và nó đã liên tục nâng cấp các phiên bản để chữa lỗi, và thêm các tính năng mới.
Cách hoạt động: timthumb cung cấp cho bạn một function có sẵn, bạn chỉ việc cung cấp các tham số và nó sẽ tự động thay đổi kích thức ảnh của bạn một cách tự động.
Timthumb đang được sử dụng rộng rãi đặc biệt là các nhà phát triển website trên nền CMS WordPress.
Điều đâu tiên mà bạn cần làm đó là phải download file timthumb.php về máy của mình để sử dụng. Bạn có thể download tại đây: http://timthumb.googlecode.com/svn/trunk/timthumb.php
Sau đó để có thể sử dụng nó bạn phải có 1 cái localhost để chạy php. Và bạn cần 1 tấm hình để có thao tác được với các chức năng đơn giản của timthumb. Và cuối cùng là một tạo folder cache nằm cùng cấp với file timthumb.php.

Cấu trúc của timthumb thì như thế này:
<img src="timthumb.php?src=link_hinh_anh.jpg&w=300&h=300&q=50" />
Giải thích các kí hiệu:
- link_hinh_anh.jpg – đường dẫn hình ảnh theo định dạng http://domain.com/hinhanh.jpg
- w=300 – tức là width (chiều dài) của ảnh bằng 300px
- h=300 – tức là height (chiều cao) của ảnh bằng 300px
- q=50 – tức quality (chất lượng) của ảnh bằng 50% so với ảnh góc.

Tuy nhiên các bạn cũng có thể không cần phải dùng hết cả các tham số truyền ở trên.
- Nếu chỉ có width không thì nó sẽ tự động scale height hình cho hợp với chiều dài của hình và ngược lại.
<img src="timthumb.php?src=link_hinh_anh.jpg&w=300" />
- Nếu bạn để cả height và width thì nó sẽ vừa scale và crop hình của bạn lại cho phù hợp với width và height mà bạn chọn.
<img src="timthumb.php?src=link_hinh_anh.jpg&w=300&h=300" />
- Nếu các bạn ko để cả width height và quality thì nó sẽ để mặc định là width:100px; height:100px; quality:90%. Các bạn cũng có thể tìm và tùy chỉnh trong file timthumb.php các chỉ số mặc định trên.
<img src="timthumb.php?src=link_hinh_anh.jpg" />

Trước tiên, bạn phải bật chức năng Featured Image bằng cách vào file functions.php của wordpress và thêm đoạn code sau:
add_theme_support( 'post-thumbnails' );
Sau đó là chúng ta sẽ viết 1 hàm để lấy link của file Featured Image mà chúng ta add vào bài viết.
function get_featured_img($post_id){
$img_id = get_post_thumbnail_id($post_id); // lấy id của hình
$images=wp_get_attachment_image_src( $img_id, false, false ); // lấy link hình featured
return $images[0]; // 0: link hình ; 1: width ; 2: height
}
Tiếp theo, chúng ta sẽ viết thêm 1 hàm nữa để sử dụng timthumb với các tùy chỉnh width; height; quality; alt
function thumb_img($post_id,$h,$w,$q,$alt){
echo '<img align="middle" src="';
echo bloginfo('template_url');
echo '/timthumb.php?src='.get_featured_img($post_id).'&h='.$h.'&w='.$w.'&q='.$q.'" alt="'.$alt.'" />';
}
Cuối cùng, để sử dụng thì chỉ việc gọi function thumb_img() ra thôi.
Ví dụ như trong vòng lập Loop ở file single.php hay index.php thì chúng ta có thể gọi nó ra như thế này:
<?php $my_query = new WP_Query('posts_per_page=10');
if ( have_posts() ) : while ($my_query->have_posts()) : $my_query->the_post(); ?>
<?php thumb_img($post->ID,'670','150','70',get_the_title()); ?>
// $post->ID tương ứng với post id của bài viết.
// 670 tương ứng với chiều dài.
// 150 tương ứng với chiều cao.
// 70 tương ứng với chất lượng hình ảnh.
// get_the_title() lấy title của bài viết
<?php endwhile; else: ?>
<?php endif; ?>
Vậy là chúng ta đã hoàn thành việc sử dụng featured image và timthumb. Hi vọng các bạn sẽ làm được thành công. Ngoài ra còn các các cách khác để sử dụng featured image làm thumbnail, các bạn có thể tham khảo.
- Tạo Thumbnail không dùng Custom Field
- Thumbnail sử dụng Custom Field
- WordPress – Post Thumbnail
- Tạo WordPress theme – Sidebar và Thumbnail
« Vertical Scrolling: Photoshop layout
[WP Tip] Thêm button vào post editor »


Bài viết rất hay! Nhưng đã phát sinh lỗi đối với tôi, Khi đưa lên test thử nghiệm trên hosting thì bị lỗi. (Nghe đâu cần phải cài đặt thư viện GD nữa). Vậy các bạn nào đã gặp trường hợp như mình không? Và 1 trong những cách khắc phục tình trạng này ra sao? mình xin các ý kiến của Admin cũng như các bạn… Xin cảm ơn!
Thường thì khi sử dụng timthumb sẽ phát sinh khá nhiều lỗi. Trước tiên thì phải CHMOD cho folder cache là 775 hoặc 777 để nó có thể xóa và tạo các file cache. Sau đó phải kích hoạt bộ thư viện GD nữa để nó hoạt động nữa.
Còn cách cài GD thì tớ cũng bó tay. Nghe nói để cài cái đó thì cứ hỏi bên kỹ thuật, họ sẽ cài cho mình.
Cảm ơn bạn Mẫn. Hiện tại Trang Web Doanhnhandatviet.com.vn của chúng tôi đã sử dụng được timthumb khi đến với bài viết của bạn! Chúc Izwebz phát triển mạnh và ban quản trị sức khõe… Thân!
Dung cai nay cung hay!minh kiem mai:q
Trang nghichdien.com của em cũng dùng timthumb, load rất nhanh, hình không bị méo.
Sao không thấy vi du web anh nhĩ:)
Chào Admin!
em muốn làm 1 cái slide ảnh trong tất cả bài viết mà khi ta post ảnh vào trong bài viết thì khi click vào ảnh nó sẽ chuyển các ảnh sang 1 slide và show từng ảnh cho mình thì làm như thế nào vậy admin?
cảm ơn vì bài viết. Cho em hỏi, Có thể lưu được tên khác khi sử dụng timthumb không vậy. Em dùng timthumb để cắt ảnh trong backend. Trong front-page em không muốn sử dụng timthumb.
Thanks
Cái này thì chịu thôi. Backend của thằng WP có hổ trợ cắt ảnh ra luôn mà. Mà sao cậu dùng timthumb lại có thể cắt ảnh dc hay vậy?
Nếu dc là cái tut cho anh em coi thử coi.
Thank bạn, đang tìm hiểu phần này
Rất chi tiết để mình tét thử xem sao.
Không biết anh có nguồn không. Nếu có nguồn em sẽ dễ dàng trong việc copy paste và thực hiện sẽ dễ hơn. em cũng đang làm vấn đề cắt hình bằng timthumb này nè. Cảm ơn anh đã chia sẻ mọi người nhé. HIHIHI
Hello! I just wanted to take the time to make a comment and say I have really enjoyed reading your blog.
Anh ơi cho em hỏi izwebz dùng plugin gì để post code trong bài viết vậy, cho em cái link đc hok
Mình dùng cái Plugin SyntaxHighlighter Evolved, không biết bên này dùng gì
trước giờ chỉ biết dùng plugin có sẵn.
cảm ơn bài viết chi tiết
Chúc mừng năm mới IzWebz. Chúc cả nhà năm mới thật hạnh phúc nhé… ^^
Thanks
Cảm ơn bạn về bài viết khá hữu ích này. Mình thấy rất nhiều site sử dụng code timthumb này. Hình như lúc trước file này có bị lỗi về bảo mật. Nhân tiện cho mình hỏi sao bạn ko tiếp tục với series về illustrator nữa vậy. Mình đang đợi chờ series đó nè. Thank.
Cho mình hỏi ngoài lề một chút, tại sao những bài viết cũ của DW đều chuyển hết thành tên Võ Minh Mẫn, chả có nhẽ anh DW tên thật là thế
làm gì có @@ Dw là dw chứ làm sao có chuyện dw là VMM được @@
Dw sẽ không bao giờ trở lại nữa, anh đã ra đi mãi mãi rồi
ra đi mãi mãi là sao? anh ta “qua đời” rùi àh. Hix.
Khùng quá , anh DW gần 1 năm nay bận lo công việc nên ko làm tut được , còn các thành viên khác như MrV2m , NickB , Clacken là những thành viên của Izwebz cũng tham gia viết tut cho Izwebz
hình như anh ý tên thật là thế mà
Ặc, sao bạn nói vậy? thần tượng của tôi đấy
Nói vậy như a ý tèo rồi không bằng
Thanks anh vì bài viết anh Mẫn
E thấy gần 1 năm kể từ bài vắng mặt của anh DW rồi mà a chưa có video nào mợi Hjx, ko biết a ý có ốm đau bệnh tật j ko nhi? Hy vọng hôm nào rảnh anh làm video vài ba phút viết linh tinh chơi
.