Oct
11
2010

Sử dụng hình ảnh trong bài để làm thumbnail

Bào viết đáp ứng theo yêu cầu của bạn CAA trong bài viết “Đùa” với wordpress theme. Mình nghĩ rằng bài viết này sẽ có ích cho khá nhiều bạn.

Trước tiên, mình mời mọi người tìm hiểu về vấn đề lấy hình ảnh trong nội dung bài viết trước. Đây là bài viết lập trình liên quan đến việc lấy hình ảnh trong nội dung website. Mình nghĩ là bài viết này sẽ có ích cho các bạn quan tâm đến vấn đề này ngoài wordpress.

Các bạn cứ giành thời gian đọc, mình sẽ đợi….

Thumbnail for content

Hình ảnh đại diện cho bài viết

Lấy hình ảnh trong bài làm thumnail với wordpress

Chúng ta có nhiều cách để lấy được phần nội dung này. Cách đơn giản nhất theo mình là sử dụng tính năng Custom Fields để làm. Tuy nhiên, tùy theo giao diện mà Custom Field của bạn có phát huy hiệu quả hay không. Vấn đề sử dụng Custom Field tạm thời mình dừng ở đây vì nếu bàn sâu quá thì sẽ trở thành một bài về Custom Field mất. Bạn nào cần nghiên cứu kĩ hơn về nó thì chúng ta sẽ có nó trong một bài khác nhé.

Sau đây, mình xin trình bày một phương án khác đơn giản hơn và thuận tiện hơn để làm việc này. Đó là chúng ta sẽ tìm kiếm trong bài viết những file đính kèm dạng hình ảnh để làm thumbnail.

Để hình ảnh được đẹp và phù hợp với giao diện khi thu nhỏ hoặc phóng to, mình sử dụng phpThumb. Các bạn có thể download về và đặt tại thư mục theme_cua_ban/phpThumb.

Tiếp theo bạn mở file functions.php nằm trong thư mục theme của bạn và thêm vào đoạn code sau:


/********************************************************************
Get image attach
********************************************************************/
function img($width,$height) {
	global $post;
	$custom_field_value = get_post_meta($post->ID, 'in_image', true);
	$custom_field_value_2 = get_post_meta($post->ID, 'out_image', true);
	$attachments = get_children( array('post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'numberposts' => 1) );
	if ($custom_field_value == true) {
	$img_url = parse_url($custom_field_value,PHP_URL_PATH);
	print ''.$post->post_title.'';
	}
	elseif ($custom_field_value_2 == true) {
	print ''.$post->post_title.'';
	}
	elseif ($attachments == true) {
		foreach($attachments as $id => $attachment) {
		$img = wp_get_attachment_image_src($id, 'full');
		$image = $image[0];
		$img_url = parse_url($img[0], PHP_URL_PATH);
		print ''.$post->post_title.'';
		}
	}
	else {
		$img = get_template_directory_uri();
		$img_url = parse_url($img,PHP_URL_PATH);
		print ''.$post->post_title.'';
	}
}
function img2($width,$height) {
	global $post;
	$custom_field_value = get_post_meta($post->ID, 'in_image', true);
	$custom_field_value_2 = get_post_meta($post->ID, 'out_image', true);
	$attachments = get_children( array('post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'numberposts' => 1) );
	if ($custom_field_value == true) {
	$img_url = parse_url($custom_field_value,PHP_URL_PATH);
	print ''.$post->post_title.'';
	}
	elseif ($custom_field_value_2 == true) {
	print ''.$post->post_title.'';
	}
	elseif ($attachments == true) {
		foreach($attachments as $id => $attachment) {
		$img = wp_get_attachment_image_src($id, 'full');
		$image = $image[0];
		$img_url = parse_url($img[0], PHP_URL_PATH);
		print ''.$post->post_title.'';
		}
	}
	else {
		$img = get_template_directory_uri();
		$img_url = parse_url($img,PHP_URL_PATH);
		print ''.$post->post_title.'';
	}
}

Hai hàm trên có tác dụng tìm kiếm và phân tích, lấy hình ảnh thích hợp, kết hợp với bộ thư viện phpThumb để tạo ra các hình ảnh theo yêu cầu của bạn.

Tiếp theo, bạn mở file index.php cũng trong thư mục theme của bạn, tìm đến đoạn tiêu đề


Tùy theo từng cấu trúc của theme mà bạn tìm vị trí thích hợp chèn đoạn này vào:



Trong hàm img() là giá trị chiều rộng và chiều cao bạn muốn tạo. Nếu muốn đẹp hơn cho hình ảnh này, bạn có thể mở file style.css để thiết kế thêm class thumb3 cho đẹp.

P/S : Đoạn code này mình lấy trực tiếp từ trong blog ra nên có thể sẽ có một số thành phần thừa nhưng không ảnh hưởng đến việc lấy hình ảnh của bạn. Phát triển và tùy biến đoạn code này mình sẽ trả lời dần trong comment.

Bài có liên quan

Bài viết liên quan

Tác giả: Nguyễn Duy Nhân

Một blogger ... cùi bắp! Đơn giản: tôi muốn ghi lại những gì xảy ra xung quanh, cả công việc lẫn cuộc sống và chia sẻ với các bạn đọc. Nếu bạn cảm thấy bài viết có nhiều điểm không chính xác, hãy comment và chia sẻ để tôi còn được học hỏi từ những góp ý của bạn.

14 bình luận + Bình luận ngay

  • >:D:D:D<

  • Ủa sao em không comment được thế nhỉ

  • A được rồi. Cảm ơn bác Nhân vì bài viết. Dạo này đang bận thi cử nên ít online. Em rất thích những bài viết hướng dẫn sd code như thế này. một lần nữa cảm ơn bác

  • Ủa mà add vào đâu nhỉ bác ^^ em newbie, hihi em add nó báo lỗi :( :((

  • Hihi nhưng nó ko tự động anh à :) em vẫn phải edit :)

    • Edit gì bạn ? Nó tự động lấy ảnh từ bài viết ra làm thumbnail rồi mà. Một số ảnh của báo Tuổi Trẻ bị lỗi do redirect thôi.

  • Edit bài viết ấy :)
    Còn báo tuổi trẻ em hem có lấy vì lỗi :)
    Em làm hoài mà nó ko ra :((

    • Vẫn không cách nào hiểu được bạn muốn gì và gặp lỗi gì :| Bạn mô tả rõ ràng cách làm và nếu được thì cho mình xin cái demo. Biết đâu còn giúp được bạn chứ bạn nói như vầy thì mình… bó giò luôn.

      • hihi thì em có làm như của anh, em add cái code anh đưa ra ấy thì em thấy trên header nó hiện nguyên cái code trên lên phần đầu, nên em đã xóa đi. Em có dùng plugin robot – VN 1.1.0 ấy, tự động post bài nhưng thumbnail thì ko có hiện vậy nên em mới kêu.
        Demo: http://news-247.org

        Em dùng themes VN-News ý mà :)

  • e thường upload ảnh lên acc photobucket hoặc Megapix của e, cách của anh hình như khong áp dụng đc cho e đúng khong ạ? cách của a fai upload ảnh bằng chính WordPress phải không a? a hướng dẫn e làm tạo thum theo ảnh đầu tiên trong bài viết đc không ạ, khi e upload ảnh đó lên hosting khác khong fai Wp

    • Link ở đâu không qua trọng. Chủ yếu là URL phải còn sống là được.

      • e dùng theme y hệt anh “Extended Ma”, a có thể gửi cho e các file php hay là file gì đó cần thiết,đã được sửa để làm đc công việc hiện ảnh đầu tiên trong posst làm thumb , vào mail cho e đc không (bkshare.com@gmail đó ạ), e mới vọc lên khong biết chèn code anh hướng dẫn vào đâu cả :((
        tìm trong file index-magazine.php cũng khong có dòng “php the_title();” ở đâu

  • Chức năng sử dụng hình ảnh làm thumbnail trong 1 số theme thấy cũng khá hay, nhưng mình thì lại ko thích dùng lắm :D Thiết nghĩ thumbnail chút xíu không thể thể toát hết nội dung, mà lại mất công design hoặc tìm hình thích hợp nữa :) )

Mạng xã hội