web-dev-qa-db-fra.com

Obtenir tous les articles en RSS

Je me demande comment/si je peux accéder à plus que les derniers posts X définis dans les paramètres de wordpress. J'ai vu des plugins migrer tout le contenu d'un blog via RSS, sans avoir fouillé pour voir leurs méthodes.

En gros, je gère quelques centaines de blogs WordPress et je construis un générateur de newsletter pour mes clients. Ils veulent pouvoir sélectionner quelques articles et faire en sorte que les extraits apparaissent dans le corps de la lettre d'information. Les sites sont répartis sur plusieurs serveurs et le générateur de newsletter est construit sur notre CRM, ce qui rend les requêtes directes dans la base de données difficiles. RSS serait le plus propre, mais je n'arrive pas à comprendre comment accéder à plus de 10 à la fois (lorsque 10 est défini dans l'admin).

Des idées?

7
bhamrick

Le codex contient un exemple de code expliquant comment utiliser le filtre post_limits pour remplacer la quantité définie dans admin pour le flux.

if (isset ($query->query_vars['feed']) and ($query->query_vars['feed'] == 'ics')) 
    add_filter('post_limits','__return_empty_string'); 

http://codex.wordpress.org/Function_Reference/query_posts#Usage_Tips

4
Rarst

Un moyen d'obtenir vos messages est d'appeler les différentes pages du flux rss dans votre générateur de newsletter. C'est une approche sûre qui ne nécessite pas de mettre à jour vos différentes installations Wordpress:

yourwebsite.com/feed -> obtenir les 10 derniers messages

yourwebsite.com/feed/? paged = 2 -> obtenir les 10 prochains messages

Etc.

20
user2611

Malheureusement, ce que vous essayez de faire est généralement mal vu dans la plupart des communautés. Ce que je vous entends demander, c'est:

  • Un moyen de récupérer à distance plus que le nombre par défaut de (publications récentes)
  • Récupérer éventuellement tous publications publiées pour un site
  • Sans aucune interaction directe avec le site lui-même (via RSS)

Il s'agit d'une pratique couramment utilisée pour extraire du contenu de blogs et le republier sans l'autorisation de l'auteur original. C'est pourquoi je dis que c'est généralement mal vu. La plupart des auteurs de blogs consacrent beaucoup de temps et d'énergie à la création d'un contenu de qualité. Il est donc très facile pour un tiers de tirer parti de son travail acharné pour ajouter du crédit SEO à son propre site.

Cela dit, je suppose pour le moment que vous avez des raisons légitimes de supprimer le contenu de plus de 700 sites. Dans ce cas, je recommanderais une méthode programmatique distincte - pas le RSS. Si vous possédez des informations de connexion légitimes pour tous ces sites (c’est-à-dire vos sites et non ceux de quelqu'un d'autre), vous pouvez utiliser les fonctionnalités XML-RPC intégrées de WordPress pour récupérer le contenu.

Utilisez la bibliothèque XML-RPC intégrée pour transmettre une demande à metaWeblog.getRecentPosts en spécifiant l'ID du blog (généralement 0 pour des sites uniques, mais peut être différent pour plusieurs sites), votre nom d'utilisateur WordPress, votre mot de passe WordPress et le nombre de messages à récupérer (définissez-le sur -1 pour les recevoir tous).

L’autre site répondra avec un fichier XML (plutôt volumineux) contenant le contenu que vous pouvez créer avec ce que vous voulez. Tout cela peut arriver en coulisse, et la requête metaWeblog.getRecentPosts vous donnera beaucoup plus d'informations qu'un flux RSS (y compris les champs personnalisés, qui peuvent être importants pour vous).

4
EAMann

Si la mémoire est utile, passer -1 comme nombre de messages a le même effet. Pas tout à fait sûr de savoir comment il est jeté dans une URL, cependant.

Soit dit en passant, si vous avez vraiment plus de 700 sites, pensez à un cron que svn met à jour ou que git tire d'une branche stable, d'un dépôt privé quotidiennement ... Combiné à un appel http quotidien à wp- admin/upgrade.php. Cela vous évitera beaucoup de tracas lors de la mise à niveau ou du peaufinage de vos sites - en ce sens que tout sera fait automatiquement.

2
Denis de Bernardy

Bien que n'étant pas "tous les messages", je dirais qu'un paramètre limit est beaucoup plus utile.

Je recommanderais directement de filtrer l'option "posts_per_rss" en tant que telle:

add_filter( 'option_posts_per_rss', 'my_posts_per_rss' );
function my_posts_per_rss( $option ) {
    if( isset( $_GET['limit'] ) ) {
        return (int) $_GET['limit'] ?: $option;
    }
    return $option;
}

Le flux pourrait alors être consulté comme suit: http://example.org/category/acme/feed/?limit=999

0
farinspace

vous voudrez peut-être utiliser un agrégateur RSS comme FeedWordpress

0
mireille raad

Si vous accédez à Paramètres> Lecture> et modifiez la valeur dans l'option "Les flux de syndication affichent les plus récents" en un nombre qui vous convient, le nombre de flux que vous avez entré s'affiche.

0
vegaskevin