Thêm trường tùy chỉnh vào RSS loại bài đăng tùy chỉnh


17

Tôi muốn thêm các trường tùy chỉnh trong loại bài đăng tùy chỉnh của mình vào nguồn cấp RSS cho loại bài đăng đó có tại http://example.com/feed/?post_type=my_custom_post_type

Tôi đã thấy thông tin về việc làm điều này cho nguồn cấp dữ liệu thông thường nhưng không có cách nào để viết lại nguồn cấp dữ liệu loại bài đăng tùy chỉnh.

Tôi sẽ cần thêm 10 - 15 mặt hàng vào nguồn cấp dữ liệu (hành động thứ nhất, hành động thứ 2, hành động thứ 3, giá cả, liên kết mua hàng ...)

Câu trả lời:


20
function add_custom_fields_to_rss() {
    if(get_post_type() == 'my_custom_post_type' && $my_meta_value = get_post_meta(get_the_ID(), 'my_meta_key', true)) {
        ?>
        <my_meta_value><?php echo $my_meta_value ?></my_meta_value>
        <?php
    }
}
add_action('rss2_item', 'add_custom_fields_to_rss');

Bạn sẽ có thể thay thế và bất kỳ giá trị meta nào khác bạn cần thêm vào nguồn cấp dữ liệu.


1
vì vậy tôi cần thêm một mục vào kiểm tra loại bài đăng cho mỗi khóa meta (có thể là khoảng 10) sau đó gọi nó vào mẫu? Bạn không thể gọi get_post_meta trong khu vực giá trị meta với id bài đăng?
curtismchale

2
Câu trả lời tốt đẹp!
MikeSchinkel

@curtismchale, tôi chỉ bao gồm câu trả lời đơn giản nhất. Nếu bạn đang tham gia vào nhiều lĩnh vực đó, có lẽ tôi sẽ đi với một cái gì đó được định dạng giống như câu trả lời của @ mikechinkel.
Prettyboymp

19

Xin chào @curtismchale:

Piggybacking tắt @ prettyboymp của câu trả lời xuất sắc, với spin của tôi vào nó, dưới đây là cách bạn có thể làm nhiều lĩnh vực tùy chỉnh (tôi đã làm 3, bạn có thể làm nhiều hơn):

add_action('rss2_item', 'yoursite_rss2_item');
function yoursite_rss2_item() {
  if (get_post_type()=='my_custom_post_type') {
    $fields = array( 'field1', 'field2', 'field3' );
    $post_id = get_the_ID();
    foreach($fields as $field)
      if ($value = get_post_meta($post_id,$field,true))
        echo "<{$field}>{$value}</{$field}>\n";
  }
}

PS Hãy chắc chắn đưa ra đạo cụ @prettyboymp vì tôi không biết làm thế nào trước câu trả lời của anh ấy. Tôi cũng chỉ trả lời vì tôi không chắc sẽ mất bao lâu trước khi anh ấy trở lại nên tôi quyết định trả lời bạn trong thời gian đó.


7

CẢM ƠN BẠN CẢM ƠN những thông tin tuyệt vời này.

Tôi muốn mở rộng những gì hai người kia đã viết ... Để xác thực điều này, bạn phải có một không gian tên tùy chỉnh. Đây là cách bạn làm điều đó:

/* IN ORDER TO VALIDATE you must add namespace   */
add_action('rss2_ns', 'my_rss2_ns');
function my_rss2_ns(){
    echo 'xmlns:mycustomfields="'.  get_bloginfo('wpurl').'"'."\n";
}

Và sau đó tiền tố mục tên trường với không gian tên tùy chỉnh Trong ví dụ này, tôi đã sử dụng "mycustomfields" Xem bên dưới:

/*  add elements    */
add_action('rss2_item', 'yoursite_rss2_item');
function yoursite_rss2_item() {
  if (get_post_type()=='my_custom_post_type') {
    $fields = array( 'field1', 'field2', 'field3' );
    $post_id = get_the_ID();
    foreach($fields as $field)
      if ($value = get_post_meta($post_id,$field,true))
        echo "<mycustomfields:{$field}>{$value}</mycustomfields:{$field}>\n";
  }
}

Trên một lưu ý phụ, bạn có thể sử dụng một hành động để nối vào bất kỳ trong số 3

    rss2_ns : to add a specific namespace
            add_action('rss2_ns', 'my_rss2_ns');

    rss2_head : to add tags in the feed header
            add_action('rss2_head', 'my_rss2_head');

    rss2_item : to add tags in each feed items
            add_action('rss2_item', 'my_rss2_item');

Đối với những người hiển thị ở đây: Jetpack quảng cáo các không gian tên xmlns: Geo và xmlns: georss. Không cần thêm những thứ này nếu bạn đang sử dụng Jetpack.
MastaBaba
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.