Lunghezza della voce del feed rss individuale per le categorie?


9

So recuperare il feed rss2 da una categoria in wp, vale a dire aggiungere /feeddietro il nome della categoria. Tuttavia, quando lo faccio, non tutte le voci di quel feed sono incluse nell'rss, questo perché ho impostato la restrizione del feed su 50 nel back-end dell'amministratore.

Vorrei sapere se una lunghezza del feed può essere impostata individualmente per ogni categoria / feed programmaticamente.

Non sono riuscito a trovare alcuna impostazione API per la dimensione dei feed ... qualsiasi aiuto è il benvenuto qui.

Grazie per l'aiuto.


Stephen Harris e CodeMonkey le risposte non funzionano entrambe per una particolare categoria? Altrimenti entrambe le risposte funzionano per me! Perché potrebbe non funzionare solo per una categoria?
Mahatmanich,

Risposte:


8

Si dovrebbe essere in grado di utilizzare pre_get_postse impostare il posts_per_page50 condizionale (su essere mangime per le categorie). Sfortunatamente c'è questo biglietto trac irrisolto .

L'unica soluzione è agganciare post_limitse sostituire direttamente la LIMITparte della query SQL.

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;
}

Ehi Stephen, ci penserò su, in realtà voglio sempre tutte le voci di una categoria in un feed e solo sulla mia pagina del blog voglio una limitazione del limite che ho impostato nel back-end, come lo farei?
Mahatmanich,

In tal caso, return "";piuttosto che "LIMIT $page_start, $per_page"dovrebbe farlo.
Stephen Harris,

Ehi, puoi spiegare un po 'il tuo codice? Non sono del tutto sicuro se è quello che voglio quello che stai offrendo qui.
Mahatmanich,

Quindi, per i feed di categoria, vuoi restituire tutti i post, quindi non vuoi una LIMITparte per la tua query. Il filtro sopra, ti consente di sostituire la LIMITparte con una stringa vuota, in modo che il sql risultante recuperi tutti i post.
Stephen Harris,

1
Sì, ma ti consiglio di fare un 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;
}

tutto quello che devi fare è modificare questa funzione e riprogrammare la tassonomia in base alla tassonomia della tua categoria e modificare la lumaca in gran parte della tua categoria ...


Ti andrebbe di spiegare il tuo codice?
Mahatmanich,

Filtro Query SQL semplice che si attiva nel feed ($ wp_query-> is_feed == true) se viene trovata una tassonomia specifica ($ wp_query-> query_vars ['custom_taxonomy'] custom_taxonomy in esempio) e se quivaluente a qualche lumaca ($ wp_query-> query_vars ['custom_taxonomy'] == 'slug'). se tutto ciò accade e è vero (su un sito.com/your-custom-feed-for-category.xml) non otterrai risultati limite nel feed (istruzione $ SQL divisa per il valore LIMIT che significa che è stata restituita senza l'ultimo LIMIT operatore ... nessun limite. tutte le voci per rss.)
Oleg Butuzov

Dove lascerei cadere quel codice? funzioni.php del mio tema?
Mahatmanich,

Functions.php si adatta perfettamente. ma prima cambia la lumaca e il nome della tassonomia personalizzata. e svuotare la cache del browser prima del test (feed RSS nella cache del browser).
Oleg Butuzov,

Ehi grazie per l'heads up con la cache! Funziona in qualche modo, ma comunque su almeno una categoria non riceverò tutti i post nel feed, su altri funziona ...
mahatmanich
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.