Làm thế nào để custom RSS feed trong wordpress

Lượt xem: 3503

Trong WordPress RSS feed mặc định được tích hợp sẵn. Bạn có thể điều chỉnh các RSS feed mặc định bằng cách thêm nội dung tùy chỉnh vào RSS feed của mình hoặc thậm chí thêm hình thu nhỏ của bài viết vào RSS feed của bạn.

Nguồn cấp RSS và Atom mặc định là đủ cho hầu hết người dùng, nhưng bạn có thể muốn tạo nguồn cấp RSS tùy chỉnh để cung cấp loại nội dung cụ thể. Trong bài viết này, dandev sẽ hướng dẫn bạn cách tạo nguồn cấp dữ liệu RSS tùy chỉnh trong WordPress.

Xin lưu ý rằng hướng dẫn này không dành cho người dùng WordPress mới bắt đầu. Nếu bạn là người mới bắt đầu và vẫn muốn dùng thử, hãy làm như vậy trên bản cài đặt ở local (cục bộ).

Như thường lệ, bạn phải tạo một bản sao lưu hoàn chỉnh cho trang web WordPress của mình trước khi thực hiện bất kỳ thay đổi lớn nào đối với một trang web đang hoạt động.

Nào cùng bắt đầu với nguồn cấp dữ liệu RSS tùy chỉnh đầu tiên của bạn trong WordPress.

Giả sử bạn muốn tạo một nguồn cấp RSS mới chỉ hiển thị các thông tin sau:

  • Title
  • Link
  • Published Date
  • Author
  • Excerpt

Trước tiên chúng ta cần tạo RSS feed  mới trong file functions.php của themes hoặc trong một plugin dành riêng cho trang web:

 


add_action('init', 'customRSS');
function customRSS(){
        add_feed('feedname', 'customRSSFunc');
}

Đoạn mã trên kích hoạt hàm customRSS, chức năng này sẽ thêm nguồn cấp dữ liệu (feed). Hàm add_feed có hai đối số, tên nguồn cấp dữ liệu và một hàm gọi lại.

Tên nguồn cấp dữ liệu sẽ tạo nên url nguồn cấp dữ liệu mới yourdomain.com/feed/feedname và hàm gọi lại sẽ được gọi để thực sự tạo nguồn cấp dữ liệu. Hãy ghi chú lại tên nguồn cấp dữ liệu, vì sau này bạn sẽ cần đến tên này.

Khi bạn đã khởi tạo nguồn cấp dữ liệu, bạn sẽ cần tạo hàm gọi lại để tạo nguồn cấp dữ liệu bắt buộc, bằng cách sử dụng mã sau trong file functions.php của themes hoặc trong một plugin cụ thể của trang web:


function customRSSFunc(){
        get_template_part('rss', 'feedname');
}

Đoạn mã trên đang sử dụng hàm get_template_part để liên kết đến một tệp mẫu riêng biệt, tuy nhiên, bạn cũng có thể đặt mã RSS trực tiếp vào hàm. Bằng cách sử dụng get_template_part, chúng tôi có thể giữ chức năng riêng biệt với bố cục.

Hàm get_template_part có hai đối số, slug và name, sẽ tìm kiếm tệp mẫu có tên ở định dạng sau, bắt đầu với tệp ở trên cùng (nếu không tìm thấy tệp đầu tiên, nó sẽ chuyển sang tệp thứ hai , và như thế):


1.	wp-content/themes/child/rss-feedname.php
2.	wp-content/themes/parent/rss-feedname.php
3.	wp-content/themes/child/rss.php
4.	wp-content/themes/parent/rss.php


Đối với mục đích của hướng dẫn này, tốt nhất là đặt slug thành loại nguồn cấp dữ liệu bạn đang tạo (trong trường hợp này là: rss) và tên cho tên nguồn cấp dữ liệu được định cấu hình trước đó.

Khi bạn đã yêu cầu WordPress tìm kiếm mẫu nguồn cấp dữ liệu, bạn sẽ cần tạo nó. Đoạn mã dưới đây sẽ tạo bố cục cho nguồn cấp dữ liệu với thông tin mà chúng ta đã liệt kê trước đó. Lưu tệp này trong thư mục themes của bạn dưới dạng tệp mẫu slug-name.php được định cấu hình trong hàm get_template_part.


<?php
/**
 * Template Name: Custom RSS Template - Feedname
 */
$postCount = 5; // The number of posts to show in the feed
$posts = query_posts('showposts=' . $postCount);
header('Content-Type: '.feed_content_type('rss-http').'; charset='.get_option('blog_charset'), true);
echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'> ';
?>
<rss version="2.0"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    <?php do_action('rss2_ns'); ?>> 
<channel>
       <title><?php bloginfo_rss('name'); ?> - Feed</title> 
       <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" /> 
        <link><?php bloginfo_rss('url') ?></link> 
       <description><?php bloginfo_rss('description') ?></description> 
       <lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate> 
        <language><?php echo get_option('rss_language'); ?></language>
        <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod> 
       <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency> 
       <?php do_action('rss2_head'); ?>
       <?php while(have_posts()) : the_post(); ?>
               <item>
                        <title><?php the_title_rss(); ?></title> 
                        <link><?php the_permalink_rss(); ?></link> 
                        <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate> 
                       <dc:creator><?php the_author(); ?></dc:creator> 
                       <guid isPermaLink="false"><?php the_guid(); ?></guid> 
                        <description><![CDATA[<?php the_excerpt_rss() ?> ]]></description> 
                        <content:encoded><![CDATA[<?php the_excerpt_rss() ?> ]]></content:encoded> 
                       <?php rss_enclosure(); ?> 
                      <?php do_action('rss2_item'); ?> 
               </item> 
     <?php endwhile; ?> 
</channel> 
</rss> 



Mã mẫu này sẽ tạo ra một nguồn cấp RSS theo bố cục trên. Biến postCount cho phép bạn kiểm soát số lượng bài đăng sẽ hiển thị trong nguồn cấp dữ liệu của bạn. Mẫu có thể được sửa đổi theo yêu cầu để hiển thị bất kỳ thông tin nào bạn yêu cầu (ví dụ: đăng hình ảnh, nhận xét, v.v.).

Hàm the_excerpt_rss sẽ hiển thị đoạn trích của mỗi bài đăng và đối với các bài đăng không có đoạn trích, hàm này sẽ hiển thị 120 từ đầu tiên của nội dung bài đăng.

Cuối cùng, để hiển thị nguồn cấp dữ liệu của bạn, trước tiên bạn cần xóa các quy tắc viết lại WordPress của mình. Cách đơn giản nhất để thực hiện việc này là đăng nhập vào quản trị viên WordPress và nhấp vào Settings -> Permalinks. Khi ở đây, chỉ cần nhấp vào Lưu thay đổi, thao tác này sẽ xóa các quy tắc viết lại.

Giờ đây, bạn có thể truy cập nguồn cấp dữ liệu mới của mình tại yourdomain.com/feed/feedname, nơi feedname là tên nguồn cấp mà bạn đã cung cấp trong hàm add_feed trước đó.

Xử lý sự cố (Troubleshooting)

Tôi gặp lỗi 404 khi cố gắng xem nguồn cấp dữ liệu của mình!

Kiểm tra xem bạn có đang sử dụng đúng tên nguồn cấp dữ liệu trong URL của mình hay không. Nó phải là cái bạn đã cung cấp trong hàm add_feed

Nếu bạn có tên nguồn cấp dữ liệu chính xác, các quy tắc viết lại của bạn có thể không hiển thị chính xác. Lưu lại các liên kết cố định của bạn chỉ để chắc chắn.

Nếu bạn đã lưu lại các liên kết cố định của mình, bạn có thể buộc thực hiện viết lại thông qua tệp functions.php của themes.

Thêm mã sau vào hàm customRSS tùy chỉnh mà chúng ta đã tạo trước đó. Đảm bảo rằng bạn thêm mã sau hàm add_feed.


global $wp_rewrite;
$wp_rewrite->flush_rules();

Khi bạn đã thêm điều này, hãy tải lại trang web WordPress của bạn. LƯU Ý: Cần loại bỏ ngay sau khi sử dụng. Một lần là đủ để các quy tắc được tuôn ra.

Nguồn cấp dữ liệu của tôi không xác thực!

Sử dụng trình xác thực nguồn cấp dữ liệu W3C (W3C feed validator), các chi tiết cụ thể sẽ được cung cấp khi nguồn cấp dữ liệu của bạn không xác thực. Chỉnh sửa tệp mẫu nguồn cấp dữ liệu để giải quyết các vấn đề này

Tôi đang gặp lỗi xác thực <language />

Điều này thường xảy ra khi ngôn ngữ RSS chưa được định cấu hình trên cài đặt WordPress của bạn. Để thực hiện việc này, bạn có thể thêm mã sau vào tệp functions.php của themes để cập nhật tùy chọn ngôn ngữ.


function rssLanguage(){
        update_option('rss_language', 'en');
}
add_action('admin_init', 'rssLanguage');


Chỉnh sửa đối số thứ hai của hàm update_option để thay đổi ngôn ngữ thành ngôn ngữ bạn yêu cầu. Kiểm tra danh sách đầy đủ của RSS Language Codes.( https://www.rssboard.org/rss-language-codes#table)

Khi mã trên đã được thêm vào tệp chức năng của bạn, hãy tải màn hình quản trị WordPress để mã có hiệu lực. Sau đó, mã sẽ được xóa khỏi tệp chức năng WordPress của bạn. Tải nó một lần là đủ để định cấu hình cài đặt rss_language.

Điều này cũng có thể được thực hiện trực tiếp trong cơ sở dữ liệu, bằng cách tìm tùy chọn rss_language trong bảng wp_options.

Dandev hy vọng bài viết này đã giúp bạn tạo tùy chỉnh RSS feed của riêng mình trong WordPress. Hãy cho dandev biết cách thức và lý do bạn sẽ sử dụng nguồn cấp RSS tùy chỉnh trên trang web WordPress của mình bằng cách để lại nhận xét bên dưới.