Hướng dẫn tạo thumbnail tự động từ hình ảnh trong bài viết

Thảo luận trong 'Wordpress Plugins' bắt đầu bởi babyinternet, 24/12/10.

  1. babyinternet

    babyinternet Administrator

    Tham gia ngày:
    4/7/08
    Bài viết:
    4,656
    Đã được thích:
    1,581
    Điểm thành tích:
    113
    Nơi ở:
    [}{]e[][]
    Nhiều bạn thắc mắc và đặt câu hỏi làm thế nào để tự động tạo ra thumbnail từ bài viết. Đặc biệt là các bạn không tự biên soạn bài mà sử dụng các Robot tự động đăng bài như RobotVN chẳng hạn. Bài viết hôm nay sẽ giúp các bạn giải quyết vấn đề này bằng cách tự động tạo ra một thumbnail từ nội dung bài viết.

    Phương án giải quyết vấn đề.

    Mình sử dụng một function đã được chia sẻ trước đây và khá nhiều trên Internet nhưng có nâng cấp hơn một tí nhằm tiết kiệm tài nguyên và hoạt động hiệu quả hơn. Căn bản, vấn đề của chúng ta được giải quyết như sau:

    1. Bước 1: tìm kiếm các các Custom Field có tên in_image và out_image, giá trị tương ứng sẽ là các URL đến hình ảnh đã được các bạn khai báo trước đó. Nếu tồn tại sẽ sử dụng hình ảnh này làm thumbnail.
    2. Bước 2: Nếu không có 2 custom field với tên in_image và out_image như đã nói ở trên, kiểm tra và lấy các attachment dạng hình ảnh làm thumbnail.
    3. Bước 3: Nếu không tồn tại attachment như đã nói, tiến hành tìm kiếm các hình ảnh trong nội dung bài và lấy hình ảnh đầu tiên làm thumbnail.
    4. Bước 4: Nếu không tồn tại hình nào, lấy một hình ảnh mặc định làm thumbnail mặc định.
    5. Bước 5: Tiến hành resize hình ảnh để sử dụng làm thumbnail.
    6. Bước 6: Hiển thị thumbnail.

    Với các bước tiến hành như đã nói ở trên chắc chắn không có bài viết nào là không có thumbnail rồi :D


    Tiến hành:

    Bạn thêm đoạn mã sau vào file functions.php trong thư mục theme của bạn:

    PHP:
    /********************************************************************
    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_title.'" />';
        }
        elseif (
    $custom_field_value_2 == true) {
        print '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_title.'" />';
            }
        }
        else {
            
    $img get_template_directory_uri();
            
    $img_url parse_url($img,PHP_URL_PATH);
            print 
    '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_title.'" 
    />';
        }
        elseif ($custom_field_value_2 == true) {
        print '
    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_title.'" />';
            }
        }
        else {
            
    $img = get_template_directory_uri();
            
    $img_url = parse_url($img,PHP_URL_PATH);
            print 'post_title.'" 
    />';
        }
    }

    Đoạn mã mình cung cấp ở trên sẽ giải quyết từ bước 4 đã nói ở trên. Bạn chú ý hình ảnh no_image.gif là hình ảnh mặc định. Bạn có thể download hình ảnh này bằng cách chọn save as hình mình cung cấp dưới đây.

    [​IMG].

    Resize hình ảnh theo giao diện:

    Mình sử dụng phpThumb để resize hình ảnh. Bạn download phpThumb ở đây và chép vào thư mục /wp-content/themes/theme_name/phpthumb/. Đoạn mã mình thêm vào file functions.php sẽ tự động gọi phpThumb để tạo thumbnail.

    Hiển thị thumbnail

    Tại vị trí cần hiện thumbnail bạn gọi hàm sau <?php img(x,y); ?> với x và y là 2 giá trị dạng số qui định chiều rộng(x) và chiều cao (y) của thumbnail. Bạn chú ý :

    Mã:
    <a href="<?php the_permalink() ?>" class="thumb3" title="Chuyển đến bài viết <?php the_title_attribute(); ?>"><?php img(510,120); ?></a>

    Nghĩa là hàm gọi thumbnail của bạn phải nằm giữa vòng lặp while() như cấu trúc trên để có thể lấy được chính xác.

    OK ! Chỉ cần vậy thôi.


    Hi vọng tut ngắn này giúp được cho nhiều bạn sử dụng Wordpress cũng như RobotVN.
     
  2. scounter

    scounter Đang làm quen

    Tham gia ngày:
    3/6/10
    Bài viết:
    63
    Đã được thích:
    0
    Điểm thành tích:
    6
    Nơi ở:
    http://www.duhocanh.edu.vn
    Re: Hướng dẫn tạo thumbnail tự động từ hình ảnh trong bài vi

    ngon đó bác Nhân, có time sẽ test xem ntn :D, lâu rùi hem động WP hihi




    du hoc anh
     
  3. vunhatnam

    vunhatnam I'm a VIP I'm a VIP

    Tham gia ngày:
    13/6/09
    Bài viết:
    260
    Đã được thích:
    0
    Điểm thành tích:
    16
    Nơi ở:
    http://tut.vn
    Re: Hướng dẫn tạo thumbnail tự động từ hình ảnh trong bài vi

    tút hay ... nhưng mà em có vấn đề là với file gif thì ghi dùng php nó mất chuyển động, với file png và gif, thì background không màu không mùi bị chuyển thành màu đen !:(( Có cách nào không anh ?
     
  4. scounter

    scounter Đang làm quen

    Tham gia ngày:
    3/6/10
    Bài viết:
    63
    Đã được thích:
    0
    Điểm thành tích:
    6
    Nơi ở:
    http://www.duhocanh.edu.vn
    Re: Hướng dẫn tạo thumbnail tự động từ hình ảnh trong bài vi

    đóng vào file functions.php nó toàn báo lỗi ở dấu ">" :(
     
  5. babyinternet

    babyinternet Administrator

    Tham gia ngày:
    4/7/08
    Bài viết:
    4,656
    Đã được thích:
    1,581
    Điểm thành tích:
    113
    Nơi ở:
    [}{]e[][]
    Re: Hướng dẫn tạo thumbnail tự động từ hình ảnh trong bài vi

    Đóng đúng chỗ hông ?
     
  6. onlove_ol

    onlove_ol H5N1 VNW

    Tham gia ngày:
    27/7/09
    Bài viết:
    1,181
    Đã được thích:
    1
    Điểm thành tích:
    38
    Nơi ở:
    Hà Nội
    Re: Hướng dẫn tạo thumbnail tự động từ hình ảnh trong bài vi

    A viết lại code cho Thesis dùm e phát... ko rành code
     
  7. thuthuatso.com

    thuthuatso.com Lính mới

    Tham gia ngày:
    7/7/10
    Bài viết:
    7
    Đã được thích:
    0
    Điểm thành tích:
    1
    Cần hướng dẫn cụ thể hơn. Với người mới vào nghề đọc xong bài này tỏ hỏa nhập ma luôn
     
  8. babyinternet

    babyinternet Administrator

    Tham gia ngày:
    4/7/08
    Bài viết:
    4,656
    Đã được thích:
    1,581
    Điểm thành tích:
    113
    Nơi ở:
    [}{]e[][]
    không lẽ mình viết khó hiểu dữ vậy ta :D
    Bạn không hiểu chỗ nào thì nói ...
     
  9. scounter

    scounter Đang làm quen

    Tham gia ngày:
    3/6/10
    Bài viết:
    63
    Đã được thích:
    0
    Điểm thành tích:
    6
    Nơi ở:
    http://www.duhocanh.edu.vn
    Mã:
                //Get post content and find image
               preg_match_all( '|<img.*?src=['"](.*?)['"].*?>|i', $post->post_content, $matches );   <~~~ LỖI DÒNG NÈ
                $img_url = $matches[1][0];
                if($img_url!=""){
                    print '[img]'.get_template_directory_uri().'/phpthumb/phpThumb.php?src='.$img_url.'&amp;w='.$width.'&amp;h='.$height.'&amp;zc=T&amp;q=70[/img]post_title.'"  class="thumbnail"  />';
                }else
                    {
    cóp vào functions.php nó báo lỗi dòng đánh dấu bên trân bác à
    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\AppServ\www\news\wp-content\themes\newswire_1.2\functions.php on line 173
     
  10. thuy_never_die

    thuy_never_die Lính mới

    Tham gia ngày:
    14/11/09
    Bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    1
    Re: Hướng dẫn tạo thumbnail tự động từ hình ảnh trong bài vi

    Mình sửa như thế này thì Code run tốt :

    preg_match_all( '|<img.*?src=["](.*?)["].*?>|i', $post->post_content, $matches );
     
  11. netconghung

    netconghung Lính mới

    Tham gia ngày:
    1/11/11
    Bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    1
    sao ko thấy gì cả nhỉ chán quá oái 50 ký tự
     
  12. mrkita.pro

    mrkita.pro Đang làm quen

    Tham gia ngày:
    8/10/11
    Bài viết:
    130
    Đã được thích:
    0
    Điểm thành tích:
    16
    Kái topic này là sao vậy. Sao k thấy bài viết đâu cả ?
     
  13. motienvn

    motienvn Lính mới

    Tham gia ngày:
    31/10/11
    Bài viết:
    6
    Đã được thích:
    0
    Điểm thành tích:
    1
     
  14. emilyde519n

    emilyde519n Lính mới

    Tham gia ngày:
    20/5/11
    Bài viết:
    4
    Đã được thích:
    0
    Điểm thành tích:
    1
    mình đoán là phải trả lời để thấy bài viết, cảm ơn "bé cưng internet"
     
  15. SeoTech

    SeoTech Đang làm quen

    Tham gia ngày:
    21/7/11
    Bài viết:
    41
    Đã được thích:
    0
    Điểm thành tích:
    6
    ẹt, sao ko thấy nội dung gì nhỉ
    hay bác delete bài rùi
     
  16. djclub76

    djclub76 Đang làm quen

    Tham gia ngày:
    19/4/11
    Bài viết:
    76
    Đã được thích:
    0
    Điểm thành tích:
    6
    sao không thấy gì hết vậy mấy bác
    ai giúp với nào

    chán quá đi mất
     
  17. lenanghai

    lenanghai Đang làm quen

    Tham gia ngày:
    7/11/11
    Bài viết:
    117
    Đã được thích:
    0
    Điểm thành tích:
    16
    em có Custom Field có tên in_image và out_image rồi muốn lấy ảnh ngoài host làm thumbnail thì phải làm sao ạ
     
  18. heroin

    heroin Lính mới

    Tham gia ngày:
    1/12/11
    Bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    1
    sao không thấy gì hết vậy mấy bác
    ai giúp với nào
    chán quá đi mất
     
  19. itnuamua

    itnuamua Đang làm quen

    Tham gia ngày:
    5/4/10
    Bài viết:
    88
    Đã được thích:
    0
    Điểm thành tích:
    6
    có phải các cách làm trên ko còn thích hợp với wp 331, mình đã làm theo rất nhiều cách mà không được, mình mới tìm hiểu wp, ai làm thành công rồi help mình với, get thumbnail trong bài viết (ảnh ngoài host)
     
  20. namln

    namln Thành viên tích cực I'm a VIP

    Tham gia ngày:
    23/9/08
    Bài viết:
    99
    Đã được thích:
    0
    Điểm thành tích:
    6
    Nơi ở:
    TP Hồ Chí Minh
    Bạn có thể dùng Plugin http://wordpress.org/extend/plugins/auto-post-thumbnail/ hoặc http://wordpress.org/extend/plugins/auto-featured-image/, plugin này tự lấy ảnh đầu tiên trong bài post làm thumbnail.
     
Đang tải...

Chia sẻ trang này