Individuelle RSS-Feed-Eintragslänge für Kategorien?

9

Ich weiß, wie man den rss2-Feed aus einer Kategorie in wp abruft, nämlich /feedhinter dem Kategorienamen. Wenn ich dies tue, sind jedoch nicht alle Einträge aus diesem Feed im RSS enthalten. Dies liegt daran, dass ich die Feed-Einschränkung im Admin-Backend auf 50 festgelegt habe.

Ich würde gerne wissen, ob eine Feedlänge für jede Kategorie / jeden Feed programmgesteuert individuell eingestellt werden kann.

Ich konnte keine API-Einstellungen für die Größe der Feeds finden ... jede Hilfe ist hier willkommen.

Danke für Ihre Hilfe.

Mahatmanich
quelle
Stephen Harris und CodeMonkey funktionieren die Antworten beide nicht für eine bestimmte Kategorie? Ansonsten funktionieren beide Antworten für mich! Warum könnte es sein, dass es nur für eine Kategorie nicht funktioniert?
Mahatmanich

Antworten:

8

Sie sollten in der Lage sein, pre_get_postsdie posts_per_pageBedingung bedingt zu verwenden und auf 50 zu setzen (beim Feed für Kategorien). Leider gibt es dieses ungelöste Trac-Ticket .

Die einzige Problemumgehung besteht darin post_limits, den LIMITTeil der SQL-Abfrage direkt einzubinden und zu ersetzen .

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
quelle
Hey Stephen, ich werde das untersuchen, ähm, eigentlich möchte ich immer alle Einträge aus einer Kategorie in einem Feed, und nur auf meiner Blog-Seite möchte ich eine Einschränkung des Limits, das ich im Backend festgelegt habe. Wie würde ich das tun?
Mahatmanich
In diesem Fall, return "";anstatt "LIMIT $page_start, $per_page"es zu tun.
Stephen Harris
Hey, kannst du deinen Code ein bisschen erklären? Ich bin mir nicht ganz sicher, ob ich das will, was Sie hier anbieten.
Mahatmanich
Bei Kategorie-Feeds möchten Sie also alle Beiträge zurückgeben, damit LIMITIhre Abfrage keinen Teil enthält. Mit dem obigen Filter können Sie das LIMITTeil durch eine leere Zeichenfolge ersetzen , sodass die resultierende SQL alle Beiträge abruft.
Stephen Harris
1
Ja, aber ich würde empfehlen, ein Plug-In daraus zu machen ( 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;
}

Alles, was Sie tun müssen, ist nur diese Funktion zu bearbeiten und die Taxonomie anhand Ihrer Kategorietaxonomie neu zu definieren und den Slug zu stark in Ihrer Kategorie zu bearbeiten ...

Oleg Butuzov
quelle
Möchten Sie Ihren Code erklären?
Mahatmanich
Einfacher SQL-Abfragefilter, der beim Feed ausgelöst wird ($ wp_query-> is_feed == true), wenn eine bestimmte Taxonomie gefunden wurde ($ wp_query-> query_vars ['custom_taxonomy'] custom_taxonomy im Beispiel) und wenn er einem Slug ($ wp_query-> query_vars) entspricht ['custom_taxonomy'] == 'slug'). Wenn all dies passiert und wahr ist (auf einer site.com/your-custom-feed-for-category.xml), erhalten Sie keine Limitergebnisse in Ihrem Feed ($ SQL-Anweisung geteilt durch den LIMIT-Wert, was bedeutet, dass er ohne das letzte LIMIT zurückgegeben wird Betreiber ... keine Begrenzung. Alle Einträge pro RSS.)
Oleg Butuzov
Wo würde ich diesen Code ablegen? functions.php meines Themas?
Mahatmanich
functions.php passt perfekt. Ändern Sie jedoch vorher die Schnecke und den Namen der benutzerdefinierten Taxonomie. und löschen Sie den Browser-Cache vor dem Testen (RSS-Feeds werden vom Browser zwischengespeichert).
Oleg Butuzov
Hey, danke für die Hinweise zum Cache! Es funktioniert irgendwie, aber immer noch in mindestens einer Kategorie werde ich nicht alle Beiträge im Feed bekommen, in anderen funktioniert es ...
Mahatmanich