Panjang entri rss feed individu untuk kategori?

9

Saya tahu cara mengambil feed rss2 dari kategori di wp, yaitu menambahkan di /feedbelakang nama kategori. Namun ketika saya melakukan ini, tidak semua entri dari feed itu termasuk dalam rss, ini karena saya menetapkan batasan feed menjadi 50 di admin backend.

Saya ingin tahu apakah panjang umpan dapat diatur secara individual untuk setiap kategori / umpan secara programatik.

Saya tidak dapat menemukan pengaturan api untuk ukuran feed ... bantuan apa pun diterima di sini.

Terima kasih atas bantuan Anda.

mahatmanich
sumber
Stephen Harris dan CodeMonkey jawaban keduanya tidak bekerja untuk satu kategori tertentu? Kalau tidak, kedua jawaban itu akan berhasil bagi saya! Mengapa hanya bisa tidak bekerja untuk satu kategori?
mahatmanich

Jawaban:

8

Anda harus dapat menggunakan pre_get_postsdan mengatur posts_per_pageke 50 secara kondisional (menjadi umpan untuk kategori). Sayangnya ada tiket trac yang belum terselesaikan ini .

Satu-satunya post_limitssolusi adalah melakukan hook ke dan mengganti LIMITbagian dari query SQL secara langsung.

add_action('post_limits','wpse71759_category_rss_limit',10,2);
function wpse71759_category_rss_limit($limit, $query){

     if( $query->is_feed() && $query->is_category() ){
          $paged =  $query->get('paged') ? (int) $query->get('paged') : 1;
          $per_page = 50;
          $page_start = ($paged-1)*$per_page;

          return "LIMIT $page_start, $per_page";
     }
     return $limit;
}
Stephen Harris
sumber
Hei Stephen saya akan melihat itu, uhm sebenarnya saya selalu ingin semua entri dari kategori dalam umpan, dan hanya di halaman blog saya, saya ingin pembatasan batas yang saya tetapkan di backend, bagaimana saya melakukannya?
mahatmanich
Dalam hal ini, return "";daripada "LIMIT $page_start, $per_page"harus melakukannya.
Stephen Harris
Hei, bisakah Anda menjelaskan sedikit kode Anda? Saya tidak yakin apakah itu yang saya inginkan dari apa yang Anda tawarkan di sini.
mahatmanich
Jadi untuk feed kategori Anda ingin mengembalikan semua posting - jadi Anda tidak ingin LIMITbagian dari permintaan Anda. Filter di atas, memungkinkan Anda untuk mengganti LIMITbagian dengan string kosong, sehingga sql yang dihasilkan akan mengambil semua posting.
Stephen Harris
1
Ya, tapi saya sarankan untuk membuat plug-in ( wpcandy.com/teaches/how-to-create-a-functionality-plugin )
Stephen Harris
2
add_filter('query', 'sql_query_feed_filter');
function sql_query_feed_filter($sql){
    global $wp_query;

    if ($wp_query->is_feed == true &&  isset($wp_query->query_vars['custom_taxonomy']) &&  in_array($wp_query->query_vars['custom_taxonomy'], array('slug1','slug2')) ){
        if (strpos($sql, 'SELECT SQL_CALC_FOUND_ROWS') !== false){
            list($sql,) = explode('LIMIT', $sql);
        }
    }
    return $sql;
}

yang perlu Anda lakukan hanyalah mengedit fungsi ini dan mengembalikan taksonomi dengan taksonomi kategori Anda dan mengedit slug ke banyak kategori Anda ...

Oleg Butuzov
sumber
Apakah Anda mau menjelaskan kode Anda?
mahatmanich
Filter SQL Query sederhana yang memicu pada umpan ($ wp_query-> is_feed == true) jika taksonomi tertentu ditemukan ($ wp_query-> query_vars ['custom_taxonomy'] custom_taxonomy pada contoh) dan jika itu bernilai untuk slug ($ wp_query-> query_vars ['custom_taxonomy'] == 'siput'). jika semua ini terjadi dan benar (di situs.com/Anda-custom-feed-for-category.xml), Anda tidak akan mendapatkan hasil batas dalam umpan Anda ($ statemen SQL dibagi dengan nilai LIMIT yang artinya dikembalikan tanpa LIMIT terakhir operator ... tidak ada batasan. semua entri per rss.)
Oleg Butuzov
Di mana saya akan meletakkan kode itu? functions.php dari tema saya?
mahatmanich
functions.php benar-benar cocok. tetapi ubah siput dan nama taksonomi khusus sebelumnya. dan bersihkan cache browser sebelum pengujian (RSS di-cache oleh browser).
Oleg Butuzov
Hai, terima kasih untuk kepala dengan cache! Ini semacam bekerja, tetapi masih pada setidaknya satu kategori saya tidak akan mendapatkan semua posting di feed, pada yang lain bekerja ...
mahatmanich