Tùy biến cách hiển thị Fed trong wordpress


WordPress cung cấp cho chúng ta 2 cách hiển thị feed là hiển thị toàn bộ hoặc 1 phần bài viết trong feed (Full Feed và Summary Feed). Nếu hiển thị toàn bộ bài viết trong feed thì tất nhiên sẽ giúp người đọc dễ dàng hơn trong việc theo dõi bài viết, nhưng nó cũng có 2 điểm bất cập sau:
– Một là người đọc sẽ ít ghé thăm trang web của bạn hơn. Hiển nhiên vì nội dung đã được truyền tải đầy đủ rồi. Người ta sẽ chỉ vào nếu như họ muốn trao đổi qua comment trên đó, hoặc khi có vấn đề gì cần hỏi. Kinh nghiệm của tôi cho thấy là số lượng này rất ít, và thường là những bạn bè, hay khách cực kì thân thuộc với website mới ghé vào kiểu này.

– Hai là dễ bị ăn cắp bài viết. Nếu bạn cung cấp Full Feed thì ăn cắp bài viết dễ dàng lắm, hoặc là đăng kí nhận feed qua email của tài khoản trong Blogger để bài viết được tự động gửi lên Blogger, hoặc là dùng các plugin đọc Feed rồi chuyển nó thành bài viết trong WordPress, …
Cho nên tôi thấy ít khi người ta để dạng Full Feed “nguyên trạng” mà thường thêm 1 số thông tin kèm theo ở cuối bài viết như “Copyright by … ” và kèm thêm vài link quảng cáo của chính họ.
Còn đối với dạng Summary Feed thì nội dung truyền tải sẽ khá ngắn gọn, đối với WordPress mặc định là 55 từ. Nội dung bài viết sẽ không chứa các kí tự HTML và nhất là hình ảnh, do đó sẽ làm giảm đi sự thu hút của người đọc. Tuy nhiên, nó lại khắc phục được 2 nhược điểm trên của Full Feed.
Tóm lại là mỗi kiểu có những điểm mạnh và điểm yếu riêng. Trong 1 lần trao đổi với anh nlfb, nhờ những gợi ý đó của anh trong việc theo dõi các feed của các blog nổi tiếng, tôi viết thêm 1 hàm PHP này để tùy biến việc hiển thị feed cho tốt hơn, khắc phục được nhược điểm của 2 loại feed trên. Vốn ban đầu là viết riêng cho TaiPhanMem.org và cho anh nlfb, bây giờ cùng chia sẻ luôn với mọi người.
<?php
/*
* Show WordPress RSS Feed in the beautiful format.
* Copyright (C) Rilwis (rilwis@gmail.com)
*/
function insertToFeed($content) {
global $post;

$category = get_the_category();
$category = $category[0];

$catLink = get_category_link($category->cat_ID);
$catName = $category->cat_name;

$content = strip_tags($post->post_content, ‘

  • ’);

    $contentWords = wordwrap($content, 1000, ‘[rw]‘);
    $contentWords = explode(‘[rw]‘, $contentWords);

    $content = $contentWords[0];

    $content = preg_replace(‘/\/’, ‘

    ’, $content);

    $content = preg_replace(‘/\[\/caption\]/’, ‘

    ’, $content);

    $pageDom = new DomDocument();

    $content = mb_convert_encoding($content, ‘HTML-ENTITIES’, ‘UTF-8′);
    $pageDom->loadHTML($content);
    $content = $pageDom->saveXML();

    $content = $content.‘

    Read more and download. Comments. Posted in ’.$catName.‘.


    Copyright ©’.date(‘Y’).‘ ’.get_bloginfo().‘.
    If you want to get some helps or disscuss, please visit our forum at http://forum.taiphanmem.org.
    Thank you for reading our feed.

    ’;

    return $content;
    }

    add_filter(‘the_excerpt_rss’, ‘insertToFeed’);
    add_filter(‘the_content_rss’, ‘insertToFeed’);
    ?>


Đoạn code trên bạn chỉ cần paste vào trong file functions.php của theme đang dùng trong WordPress là có thể sử dụng.
Giải thích và tùy biến cách hiển thị trong hàm:
Lấy tên của Category tương ứng với bài viết
$category = get_the_category();
$category = $category[0];

$catLink = get_category_link($category->cat_ID);
$catName = $category->cat_name;

Đoạn code này dùng để lấy tên của Category tương ứng với bài viết. Ở đây tôi chỉ lấy tên của category đầu tiên. Bạn cũng có thể sửa lại 1 chút bằng cách quét qua toàn bộ mảng $category và lưu tên của chúng thành 1 mảng mới rồi khi nào cần hiển thị thì dùng hàm implode() cũng được.
Loại bỏ các thẻ HTML không cần thiết và rút ngắn nội dung

Phần công việc này tương ứng với đoạn code sau đây:
$content = strip_tags($post->post_content, ‘

  • ’);


$contentWords = wordwrap($content, 1000, ‘[rw]‘);
$contentWords = explode(‘[rw]‘, $contentWords);
$content = $contentWords[0];
$content = preg_replace(‘/\/’, ‘

’, $content);
$content = preg_replace(‘/\[\/caption\]/’, ‘

’, $content);
$pageDom = new DomDocument();
$content = mb_convert_encoding($content, ‘HTML-ENTITIES’, ‘UTF-8′);
$pageDom->loadHTML($content);
$content = $pageDom->saveXML();

Như các bạn thấy, tôi dùng hàm striptags để loại bỏ các thẻ HTML và giữ lại các thẻ chính như p (để các đoạn văn được phân tách rõ ràng), img (giữ lại hình ảnh), strong, ul, li. Mục đích của chỗ này là để cho nội dung được rút ngắn bớt mà vẫn giữ được 1 vài định dạng cơ bản. Bạn cũng có thể thêm hoặc bớt 1 số thẻ HTML nếu muốn tại chỗ này.
Sau đó, hàm wordwrap được dùng để tách nội dung ra theo số lượng kí tự cho sẵn. Ở đây tôi lấy là 1000 kí tự. Lưu ý là con số 1000 này không phải là chính xác 100%, do hàm wordwrap sẽ cắt đến hết 1 từ, không để xảy ra tình trạng 1 từ bị chẻ đôi (dùng cách này không phải bận tâm về việc 1 kí tự Unicode bị “chặt giữa”), và cũng do trong nội dung của chúng ta còn sót lại 1 số thẻ HTML. Tuy nhiên, có thể áng chừng như vậy. Bạn có thể sửa nó để tăng, giảm số lượng kí tự thể hiện, tốt nhất là bạn nên thử xem số lượng bao nhiêu thì phù hợp với blog của bạn.

2 dòng tiếp theo là dùng để loại cặp shortcode trong WordPress dùng để hiển thị hình ảnh

. Nếu như bạn dùng các shortcode khác thì nên bổ xung nó ở đây.
Và đoạn cuối cùng là để trả lại định dạng XHTML được định dạng đúng. Nguyên nhân phải làm chỗ này là có thể trong quá trình cắt bằng wordwrap, 1 số thẻ HTML bị cắt vào đúng giữa. Việc dùng hàm saveXML() sẽ giúp chúng ta đóng các thẻ này lại 1 cách hợp lí.
Hiển thị Feed
Sau khi đã làm xong các bước trên, Feed của chúng ta đã khá hoàn thiện, bước dưới đây là để hiển thị nó:
$content = $content.‘

Read more and download. Comments. Posted in ’.$catName.‘.


Copyright ©’.date(‘Y’).‘ ’.get_bloginfo().‘.
If you want to get some helps or disscuss, please visit our forum at http://forum.taiphanmem.org.
Thank you for reading our feed.

’;
return $content;
Trong phần này, ngoài những gì đã được làm ở các bước trên, bạn chú ý thêm về cách lấy link của bài viết thông qua hàm get_permalink(), lấy thông tin của blog thông qua get_bloginfo(). Những thứ này tôi dùng để tạo link đến bài viết (dạng như Read More trong feed) và ghi 1 số thông tin về Copyright. Bạn nên sửa lại cho phù hợp với blog của mình.
Tất nhiên là bạn có thể chèn thêm bất kì các đoạn mã HTML nào vào chỗ này, bao gồm cả các đoạn mã quảng cáo của Google Adsense (hay bất kì dịch vụ nào nữa).
Tích hợp vào các hàm về feed của WordPress
Sau khi đã làm xong các bước trên, việc tích hợp vào các hàm feed của WordPress chỉ đơn giản là thực hiện 2 lệnh dưới:
add_filter(‘the_excerpt_rss’, ‘insertToFeed’);
add_filter(‘the_content_rss’, ‘insertToFeed’);

Ở đây tôi add_filter cho cả 2 hàm, tương ứng với 2 lựa chọn hiển thị Full Feed và Summary Feed của WordPress, có nghĩa là dù bạn chọn là cái gì cũng không ảnh hưởng tới Feed, tất cả đã được hàm này làm hộ cho rồi.
Kết quả của việc làm này các bạn có thể xem qua Feed của TaiPhanMem.org. Chúc các bạn có những kiểu feed đẹp và hiệu quả.
Theo hontap.info

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: