post image

Tạo Thumbnail không dùng Custom Field

Trong video lần trước tôi đã hướng dẫn các bạn cách hiển thị Thumbnail sử dụng Custom Field. Cách này theo tôi là hay nhất bởi vì bạn có toàn quyền quyết định thumbnail của bạn sẽ được hiện ra như thế nào và bạn có thể design thumbnail sao cho nó phù hợp với bài post. Tuy nhiên có những trường hợp bạn không muốn mất thời gian mà chỉ muốn WordPress tự động lầy tấm hình đầu tiên trong bài post và hiển thị nó làm thumbnail.

Đặc biệt nếu bạn làm trang web cho khách hàng họ không biết sử dụng Photoshop và cũng khó hình dung cách sử dụng Custom Field. Cho nên chúng ta có thể tạo thumbnail một cách tự động và hiển thị nó. Dưới đây là 2 cách bạn có thể sử dụng để hiển thị thumbnail mà không cần sử dụng Custom Field.

Sử dụng chức năng Image Attachment

Trong bài hướng dẫn cách tạo Content Slider tôi đã giới thiệu với bạn chức năng Image Attachment trong WordPress, trong bài này chúng ta cũng sẽ sử dụng lại chức năng này để hiển lấy hình của bài post. Cách này dành cho những khách hàng không biết chút gì về HTML, họ chỉ việc upload hình là xong.

Ban đầu bạn hãy mở trang index.php và trong WordPress Loop

<?php if(have_posts) : while(have_posts) : the_post() ?>

vào đoạn code sau

<?php
		//lấy hình ở trong post
		$args = array(
			'post_type'			=> 'attachment',
			'post_mine_type'	        => 'image',
			'numberposts'		=> -1,
			'order'			=> 'ASC',
			'post_status'		=> null,
			'post_parent'		=> $post->ID
		);

		$attachments = get_posts($args);
		if ($attachments) {
		foreach ($attachments as $attachment) {
			$thumbnail = wp_get_attachment_thumb_url($attachment->ID);
			break;
			}
		}
?>

Tiếp theo bạn chỉ việc echo biến $thumbnail ở trên ra vào thẻ <img> như sau:

<a href="<?php the_permalink(); ?>">
<img src="<?php echo $thumbnail; ?>" alt="post image" />
</a>

Cuối cùng khi muốn thêm hình vào bài viết bạn chọn add an image và chèn hình vào bài viết là xong.

wordpress thumbnail
Sử dung hàm preg_match

Trong cách này chúng ta sẽ không cần sử dụng chức năng upload hình như ở trên, nhưng khách hàng của bạn phải tự động chèn thẻ <img> vào bài post.

Ban đầu bạn hãy mở file functions.php trong theme của bạn ra (nếu chưa có thì tạo file functions.php) sau đó đoạn code ở dưới vào.

 function thumb_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  $first_img = $matches [1] [0];

  if(empty($first_img)){
//Bạn có thể thêm hình mặc định nếu bài post ko có hình
    $first_img = "/images/myImage.jpg";
  }
  return $first_img;
}

Lưu lại và mở tiếp file index.php và gọi hàm vừa tạo ra

<a href="<?php the_permalink();?>">
<img src="<?php echo thumb_image(); ?>" alt="thumbnail" />
</a>

Đến đây chúng ta đã có hình thumbnail rồi nhưng nó có kích thước quá lớn. Bạn có hai cách để sửa nó. Cách thứ nhất là sử dụng CSS và khai báo giá trị width của thẻ <img> với giá trị bạn muốn. Cách thứ hai là bạn sử dụng một đoạn mã có sẵn là timthumb.php bạn có thể download ở đây. Sau khi download về bạn cho nó vào thư mục theme của bạn. Trong ví dụ này tôi để nó ngang hàng với trang index.php. Và việc cuối cùng bạn cần làm là gõ đoạn code sau thay vì đoạn code trên

Nếu đoạn này có gì khó hiểu, bạn có thể xem video về phần Sidebar và Random Posts, tôi có hướng dẫn chi tiết về cách sử dụng timthumb.php

<a href="<?php the_permalink();?>">
<img src="<?php bloginfo('stylesheet_directory') ?>/timthumb.php?src=<?php echo thumb_image(); ?>&amp;h=150&amp;w=150&amp;zc=1" alt="thumbnail" />
</a>

Tất nhiên với giá trị h=150&w=150 thay bằng giá trị bạn muốn. Vậy là xong! nếu có câu hỏi gì hãy post dưới phần comment

Kết luận

Cả hai cách trên đều có thể sử dụng tốt trong mọi trường hợp, nhưng mỗi cách đều có điểm mạnh điểm yếu khác nhau, tùy từng trường hợp bạn nên chọn cách phù hợp cho mình. Tuy nhiên để có toàn quyền quyết định bạn nên sử dụng Custom Field là cách hay nhất bây giờ.

«

»

  1. Thịnh Hưng says:

    Anh DW ơi! Có cách nào thêm biến để lưu vào database và nhập giá trị biến đó ở phần post không?. Ví dụ: Em muốn thêm mục tâm trạng trước khi post bài (đây chỉ là ví dụ thôi nhé, bình thường không ai thêm mục này).
    Em đang làm 1 website bằng wordpress cho anh bạn em, anh ý không phải là dân lập trình nên muốn tạo thêm 1 mục mới phải sử dụng những cái có sẵn, chắc hẳn bảo anh ý thêm cặp thẻ làm tiêu đề cho mục mới thì…

    • Mình chưa hiểu. Bạn cho ví dụ cụ thể
      Anh DW ơi! Có cách nào thêm biến để lưu vào database và nhập giá trị biến đó ở phần post không?. Ví dụ: Em muốn thêm mục tâm trạng trước khi post bài (đây chỉ là ví dụ thôi nhé, bình thường không ai thêm mục này).
      Bạn có thể liên hệ với mình qua mail hethongthongtin@gmail.com hoặc qua forum.livesupport.vn

  2. Anh ơi cho em hỏi vấn đề giải quyết này không. Em có ý tưởng cho blog của em về cách hiển thị thumbnail cho người sử dùng bằng cách kết hợp cả 2 cái. Làm thế nào có cách kiểm tra khi không sử dụng thumbnail của customfield thì nó lấy giá trị ảnh đầu tiên của bài viết và ngược lại nếu không có nó lấy giá trị thumbnail của customfield. Còn không có thì lấy hình mặc định đưa lên. Vấn đề ở đây là em không biết làm sao kiểm tra giá trị tồn tại của customfield có tên key là thumbnail

  3. kjsslv says:

    Anh ơi có cách nào thêm custom field ở ngay phần bài viết phía trên không ah . Tức là thêm một đoạn html vào và nó tự nhận custom field không ah ?

  4. Quoc hung says:

    Mình đã làm theo cách 2. đã thấy xuất hiện thumbail nhưng mình nó nằm ở đó, bài viết nằm dưới ko bao quanh. Bạn hướng dẫn giúp được không? Cảm ơn

  5. Quoc hung says:

    àh, mình có xài evermore plugin để tự động set hiển thị số kí tự hiển thị/1 bài post. sự cố của mình có phải do nó không nhỉ?

  6. Goncorpius says:

    Cho em hỏi vấn đề này chút ,em dùng theo bước 1 của anh là Attachment để sử dụng thumb
    Nhưng vấn đề gặp phải là khi em có 2 bài viết bài viết 1 ở dưới ,bài viết 2 ở trên ,và khi em muốn bài viết 1 không có thumb ,và bài viết 2 có thumb ,nhưng khi em add img cho bài viết 2 thì bài viết 1 cũng xuất hiện cái thumb đó
    Em phải làm sao để chỉ add img trong bài nào thì chỉ xuất hiện ở bài đó ?

  1. BB
  2. BB
  3. BB

arrow

Lưu ý khi post comment:

  • Không "bóc tem" topic
  • Dùng lời lẽ có văn hoá và lịch sự
  • Xem trang FAQs trước khi hỏi
  • Bạn có thể dùng thẻ HTML như:<strong>, <em>, <a>
  • Wrap code trong dấu `backtick` (dấu trên phím Tab)

Chọn kiểu gõ: Tự động TELEX VNI Tắt