[Thủ thuật WordPress] Loại bỏ Thumbnail tự sinh khi đăng ảnh

Việc loại bỏ thumbnail với các bạn sử dụng hosting tại Việt Nam không phải là điều bạn tâm vì số lượng hình ảnh không phải là vấn đề lớn. Vì hầu hết hosting Việt Nam quản lý bằng băng thông. Tuy nhiên loại bỏ các thumbnail tự sinh với các bạn sử dụng hosting nước ngoài, ví dụ Hostgator, là việc cần thiết vì họ sử dụng cách thức quản lý theo số tệp tin. Ví dụ ở Hostgator bạn chỉ được phép có tối đa 100,000 tệp tin trên mỗi gói hosting.

1: Cài đặt lại cách WordPress cắt thumbnail

Bạn có thể vào phần Settings chọn Media theo đường dẫn /wp-admin/options-media.php rồi cài đặt lại các thông số theo hình bên dưới.

Setting Media Worpdress
Cài đặt Media tự tạo thumbnail

Giải mã: Phần này bạn đưa hết về 9999 là muốn nói WordPress sẽ cắt ảnh theo kích cỡ đó, tức là kích cỡ không hề có hihi. Bạn cũng có thể set về toàn bộ số 0

2: Xóa bỏ code tự tạo thumbnail thừa

Bạn vào Phần Appearance chọn Editor theo đường dẫn /wp-admin/theme-editor.php chọn tệp functions.php tìm các vị trí lưu tệp thumbnail như hình rồi xóa bỏ đi.

Wordpress edit theme funcions
WordPress edit theme funcions

Để hiểu rõ hơn về phần này bạn tham khảo tại trang https://codex.wordpress.org/Post_Thumbnails về cách cài đặt themes WordPress.

Thủ thuật WordPress nhỏ này không làm cho WordPress nhanh hơn, đơn giản, nó chỉ giúp không còn tệp tin thumbnail nào thừa trong WordPress. Thắc mắc hỏi đáp bạn vui lòng để ở phần comments, với các vấn đề liên quan đến bài này, hoặc liên quan đến WordPress. Ở bài sau mình sẽ hướng dẫn các bạn tự động cài đặt hình đại diện và sử dụng hình địa diện trong WordPress.

Học Thiết Kế Web WordPress Code Tạo Hình Đại Diện

WordPress có đoạn code tạo ra hình đại diện mỗi khi đăng bài, và nó cắt tất cả các ảnh khi bạn đăng lên thành các kích thước khác nhau. Điều này bạn có thể tham khảo ở bài loại bỏ các thumbnail WordPress tự sinh khi đăng bài.

Đó là bước đầu tiên bạn cần cài đặt trong quy trình chúng ta học thiết kế web cùng WordPress. Ở bài này chúng ta cùng nhau xây dựng kịch bản bước từng bước tối ưu quy trình tạo thumbnail (hình đại diện cho WordPress nhé).

Tối ưu thumbnail WordPress
Tối ưu thumbnail WordPress

Kịch bản yêu cầu, là chúng ta thiết kế một web với mỗi bài đăng trung bình có 4 hình ảnh trong đó, làm sao để tối ưu toàn bộ các hình ảnh và tiết kiệm không gian lưu trữ, cũng như tốt nhất cho người sử dụng.

Thứ nhất: Loại bỏ toàn bộ các hình đại diện thừa?

Với kịch bản bên trên mỗi khi đăng 4 hình ảnh lên, theo mặc định, bạn sẽ có 1 hình gốc, 1 hình thumnail cỡ bình thường, 1 hình thumnail cỡ trung bình và một hình thumbnail cỡ lớn đồng nghĩa với 4 hình ảnh, hosting của bạn phải chứa 16 hình điều này nếu bạn làm 100 bài là có 1600 hình ảnh.

Mình dùng hostgator, host nước ngoài, mọi thứ “ăn li mít” hết mà… không phải, hosting trong nước quản lý theo dung lượng host nước ngoài họ nói là umlimited nhưng thực tế bạn chỉ chứa được tối đa 100,000 file thôi. Không tin bạn cứ tìm hiểu mà xem. Tức là tối đa bạn chỉ đăng được khoảng 5000 bài với trung bình 4 ảnh/ bài.

Việc loại bỏ các hình đại diện thừa bạn tham khảo bài viết loại bỏ các thumbnail WordPress.

Thứ hai: Người dùng không muốn phức tạp đâu.

Tức là mỗi khi đăng bài, muốn lựa chọn hình đại diện, bước 01: bạn sẽ đăng các ảnh lên nhé, bước 02: sau đó bấm vào phần chọn hình đại diện (set featured image) bước 02: nhấn chọn hình ảnh, bước 04: nhấn chọn hình đại diện, bước 05: nhấn đăng bài.

Rất lằng nhằng, bây giờ mình muốn là đăng tất cả các hình ảnh lên, sau đó nhấn đăng bài, nó sẽ tự set hình đại diện luôn. 99% người dùng chọn hình ảnh thứ nhất làm hình đại diện.

Đây là đoạn code tự động set hình đại diện khi đăng bài.

function autoset_featured() {
          global $post;
          $already_has_thumb = has_post_thumbnail($post->ID);
              if (!$already_has_thumb)  {
              $attached_image = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" );
                          if ($attached_image) {
                                foreach ($attached_image as $attachment_id => $attachment) {
                                set_post_thumbnail($post->ID, $attachment_id);
                                }
                           }
                        }
      }
add_action('the_post', 'autoset_featured');
add_action('save_post', 'autoset_featured');
add_action('draft_to_publish', 'autoset_featured');
add_action('new_to_publish', 'autoset_featured');
add_action('pending_to_publish', 'autoset_featured');
add_action('future_to_publish', 'autoset_featured');

Tất nhiên bạn bỏ cái này vào dòng thứ 2 trong tệp functions.php ở theme của các bạn. Như vậy khi đăng bài người dùng chỉ cần nhấn đăng bài tự động hình đại diện sẽ được cài đặt, và tất nhiên là khi họ muốn thay đổi họ sẽ nhấn thay đổi 🙂

Thứ ba: Code tìm thumbnail tất cả trong một

Bây giờ trong 1 bài viết, nếu có hình ảnh được cài đặt làm hình ảnh đại diện (set thumbnail) thủ công, tức là nhấn set thumbnail hoặc sử dụng đoạn code bên trên sẽ lấy hình đó là hình đại diện. Với những bài không có cài hình đại diện sẽ lấy hình ảnh đầu tiên làm hình đại diện. Có những bài không có hình đại diện nào thì phải cài một hình mặc định làm hình đại diện.

Cả 3 trường hợp đó sẽ trong một đoạn code như thế này này

function trogiup_thumbnail($size = 'full') {
	if (has_post_thumbnail()) {
		$image_id = get_post_thumbnail_id();
		$image_url = wp_get_attachment_image_src($image_id, $size);
		$image_url = $image_url[0];
	} else {
		global $post, $posts;
		$image_url = '';
		ob_start();
		ob_end_clean();
		$output = preg_match_all('/<img.+src=['"]([^'"]+)['"].*>/i', $post->post_content, $matches);
		$image_url = $matches [1] [0];

		//Defines a default image
		if(empty($image_url)){
			$image_url = get_bloginfo('template_url') . "/img/default.jpg";
		}
	}

	return $image_url;
}

Cái này bạn cũng cho vào trong tệp functions.php của theme. Bạn chú ý ở dòng thứ nhất có cái size = full bạn hãy thay bằng cỡ hình đại diện bạn đang dùng medium hoặc thumbnail. Ở dòng có chứa /img/default.jpg bạn cũng cần thay bằng đường dẫn ảnh ở website của bạn.

Tổng kết lại

Với tất cả các giải pháp bên trên bạn có thể quản lý hình ảnh tốt nhất trong WordPress của bạn. Đó là điều quan trong. Nhưng có một vấn đề tất cả các giải pháp trên không đáp ứng được, có là kích thước hình ảnh chưa hiển thị chính xác, bởi vì bạn đang tối ưu hết mức có thể.

Một giải pháp tự cắt thumbnail, tuy nhiên ở giải pháp này 4 hình ảnh ở mỗi bài bạn sẽ có 8 hình ảnh tức là WordPress sẽ tự tạo thumnail theo kích thước của bạn.

Đây là dòng code bạn thêm vào functions.php của theme.

if (function_exists('add_theme_support')) {
	add_theme_support( 'post-thumbnails' );
	set_post_thumbnail_size( 300, 200, true);
	add_image_size('thumbnail', 300, 200, true);
	add_image_size('medium', 300, 200, true);
	add_image_size('large', 300, 200, true);
}

Xin lưu ý: 300 là chiều rộng, 200 là chiều cao tính bằng px nhé! Tức là ngoài hình ảnh gốc sẽ có 1 hình cỡ 300×200 px hoặc kích thước khác tùy bạn cài đặt.

Để kích thước hình ảnh tốt nhất thì bạn có thể cắt hình ảnh ở máy tính sau đó up lên, cài đặt hình đó làm hình đại diện, đây là một giải pháp siêu tối ưu nhưng thêm 1 bước. Một cách khác như mình đang dùng đó là sử dụng css để co lại kích thước hình ảnh. Cái này mình sẽ trình bày trong bài khác.

Như vậy toàn bộ bài hướng dẫn đã hết, xin lưu ý bài hướng dẫn chỉ dành cho những người đã biết code và sửa chữa được code, mình không trợ giúp với những câu hỏi yêu cầu sửa code của theme bạn đang sử dụng.

Ngoài ra hãy sử dụng plugin EWWW Image Optimizer để tối ưu hình ảnh, hoặc sử dung Son Auto Save Image để đưa hình ảnh về dễ dàng hơn. Hãy đưa ý kiến của bạn về những giải pháp bạn đang sử dụng để tối ưu và quản lý hình ảnh tốt nhất nhé.