Hôm nay tôi sẽ chia sẽ với anh/chị về các cách lấy ảnh đại diện trong wordpress
Ảnh đại diện hay thường gọi là thumbnail thì dùng để làm ảnh thu nhỏ của một bài viết khi show bài viết dưới dạng desc (mô tả ngắn, giống như các trang tin thường hay làm) và trong wordpress thì có 3 cách để chúng ta lấy ảnh làm đại diện:
Trong wordpress đã có support việt set ảnh làm đại diện qua chức năng featured image. Việt lấy nó như thế nào ngay sau đây tôi sẽ chia sẽ với anh chị
Trước tiên anh chị muốn resize kích thước lại đúng không nào. Để resize anh/chị dùng function sau:
1 |
add_image_size( 'shopviet-smallimage', 80, 80, TRUE ); |
Ở ví dụ trên tôi đã khai báo một kích thước resize là 80px X 80px để làm ảnh đại diện. Khi anh chị upload một image có kích thước lơn ví dụ 1024px X 768px thì nó sẽ tự động crop ra một image có size là 80px X 80px
Giờ là việt gọi nó ra nơi bạn cần lấy:
1 |
<?php echo get_the_post_thumbnail(get_the_ID(), 'shopviet-smallimage' ); ?> |
Có nghĩa là khi người quản trị upload image lên chỉ insert image vào bài viết mà không set featured image (Anh chị lưu ý đây là trường hợp upload image đối với việc new post hiện hành nha, nếu người quản trị upload ở thư việt media hoặc ở một post khác rồi sau đó mới insert vào new post=>thì new post sẽ có image insert vào nhưng không có image nào trong gallery của post)
Chúng ta sẽ lấy image đầu tiên trong gallery để làm ảnh đại diện:
Tôi đã viết sẵn một function để làm việc này hi vọng giúp ích được anh/chi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
function the_get_first_image_in_gallery($post_id,$size){ global $wpdb; $mediumSRC =''; $args = array( 'post_parent' => $post_id , 'numberposts' => 1, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'DESC', 'orderby' => 'ID', 'post_status' => null ); $attachments = get_posts( $args ); foreach ( $attachments as $attachment ) { $attachmentArray = wp_get_attachment_image_src( $attachment->ID, $size ); $caption = $wpdb->get_row("select * from $wpdb->posts where `ID` = '{$attachment->ID}'");//var_dump($attachmentArray); $width = $attachmentArray[1]; $height = $attachmentArray[2]; if ( $attachmentArray ) { $mediumSRC = $attachmentArray[0]; if ( trim( $mediumSRC != '' ) ) { $mediumSRC; } } } ?> <img width="<?php echo $width; ?>" height="<?php echo $height; ?>" src="<?php echo $mediumSRC; ?>" class="attachment-<?php echo $size; ?> wp-post-image" alt="<?php echo $caption->post_excerpt; ?>" /> <?php return; } |
Trường hợp này bất đắt dĩ bởi chúng ta sẽ resize theo kiểu ảo có nghĩa là set một trong hai cái style=”width:80px;height:auto;” hoặc ngược lại style=”width:auto;height:80px” và nó sẽ sẽ có các nhược điểm là tốc độ load page sẽ chậm lại do image resize ảo và resize không đúng theo yêu cầu ví dụ một image có size 1024px x 768px thì nó sẽ resize không đúng hình vuông (theo yêu cầu của chúng ta).Tôi đã viết sẵn một function để làm điều này:
1 2 3 4 5 6 7 8 9 10 11 |
//lay anh dieu tien lam thumbnail function get_first_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)){ //Defines a default image $first_img = false; } |
Mọi sự sao chép xin ghi rõ nguồn là fcwordpress.net
Chuyên trang về wordpress: hướng dẫn thiết kế theme, plugin, thủ thuật wordpress