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.


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

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 ...


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.