Longueur individuelle d'entrée de flux rss pour les catégories?

9

Je sais comment récupérer le flux rss2 d'une catégorie dans wp, à savoir ajouter /feedderrière le nom de la catégorie. Cependant, lorsque je le fais, toutes les entrées de ce flux ne sont pas incluses dans le rss, c'est parce que j'ai défini la restriction de flux à 50 au niveau du backend d'administration.

Je voudrais savoir si une longueur de flux peut être définie individuellement pour chaque catégorie / flux par programme.

Je n'ai trouvé aucun paramètre d'api pour la taille des flux ... toute aide est la bienvenue ici.

Merci de votre aide.

mahatmanich
la source
Stephen Harris et CodeMonkey les réponses ne fonctionnent pas toutes les deux pour une catégorie particulière? Sinon, les deux réponses fonctionnent pour moi! Pourquoi pourrait-il ne fonctionner que pour une seule catégorie?
mahatmanich

Réponses:

8

Vous devriez être en mesure d'utiliser pre_get_postset de définir la valeur posts_per_pageà 50 conditionnellement (en tant que flux pour les catégories). Malheureusement, il existe ce ticket Trac non résolu .

La seule solution consiste à accrocher post_limitset à remplacer LIMITdirectement la partie de la requête 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;
}
Stephen Harris
la source
Hé Stephen, je vais examiner cela, euh en fait, je veux toujours toutes les entrées d'une catégorie dans un flux, et uniquement sur ma page de blog, je veux une restriction de la limite que j'ai définie dans le backend, comment ferais-je?
mahatmanich
Dans ce cas, return "";plutôt que de le "LIMIT $page_start, $per_page"faire.
Stephen Harris
Hé pouvez-vous expliquer un peu votre code? Je ne sais pas trop si c'est ce que je veux ce que vous proposez ici.
mahatmanich
Donc, pour les flux de catégorie, vous souhaitez renvoyer tous les messages - vous ne voulez donc pas une LIMITpartie de votre requête. Le filtre ci-dessus vous permet de remplacer la LIMITpièce par une chaîne vide, de sorte que le sql résultant récupère toutes les publications.
Stephen Harris
1
Oui, mais je recommanderais d'en faire 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;
}

tout ce que vous avez à faire est de simplement modifier cette fonction et de répartir la taxonomie en fonction de la taxonomie de votre catégorie et de modifier le slug dans une grande partie de votre catégorie ...

Oleg Butuzov
la source
Souhaitez-vous expliquer votre code?
mahatmanich
Filtre de requête SQL simple qui se déclenche sur le flux ($ wp_query-> is_feed == true) si une taxonomie spécifique est trouvée ($ wp_query-> query_vars ['custom_taxonomy'] custom_taxonomy en exemple) et s'il est équivalent à un limace ($ wp_query-> query_vars ['custom_taxonomy'] == 'slug'). si tout cela se produit et vrai (sur un site.com/your-custom-feed-for-category.xml), vous n'obtiendrez aucun résultat limite dans votre flux ($ SQL statment divisé par la valeur LIMIT ce qui signifie qu'il est retourné sans dernière LIMIT opérateur ... aucune limite. toutes les entrées par rss.)
Oleg Butuzov
Où pourrais-je laisser tomber ce code? functions.php de mon thème?
mahatmanich
functions.php s'adapte parfaitement. mais changez le slug et le nom de la taxonomie personnalisée avant. et vider le cache du navigateur avant de tester (les flux RSS sont mis en cache par le navigateur).
Oleg Butuzov
Hé merci pour la tête avec la cache! Cela fonctionne, mais sur au moins une catégorie, je ne
recevrai