web-dev-qa-db-fra.com

Utilisation de stats_get_csv pour renvoyer une liste de messages populaires par vues avec des vignettes

J'ai récemment appris que si vous avez WordPress.com Stats installé, vous pouvez tirer parti de stats_get_csv() (élément du plugin WordPress.com Stats ).

<?php if ( function_exists('stats_get_csv') && $top_posts = stats_get_csv('postviews', 'days=-1&limit=4') ) : ?>
    <ol>
<?php foreach ( $top_posts as $p ) : ?>
        <li><a href="<?php echo $p['post_permalink']; ?>"><?php echo $p['post_title']; ?></a></li>
<?php endforeach; ?>
    </ol>
<?php endif; ?>

Voilà comment j'ai mon code mis en place maintenant. Le problème est qu'il montre des pages aussi bien que des publications. En outre, je souhaite ajouter la vignette en vedette à côté de chaque élément, ainsi qu'un tableau de types d'articles personnalisés. Est-ce possible? Si oui, quelqu'un peut-il m'aider?

2
jwp

L'API renvoie les colonnes suivantes lorsque vous interrogez la table postviews:

  • rendez-vous amoureux
  • post_id
  • titre de l'article
  • post_permalink
  • vues

Pour mon blog, la colonne post_id était vide ou 0 (pour la page d'accueil). Donc, à moins que vous n'ayez de bonnes valeurs, vous devrez travailler à partir de la valeur post_permalink et déterminer s'il s'agit d'une page ou d'un message (via une requête sur la base de données ou une expression régulière sur l'URL?), Puis interrogez votre base de données pour obtenir le résultat. poster une vignette, car l’API de statistiques WordPress.com ne collecte pas d’informations à ce sujet.

3
Jan Fabry

L'API WordPress.com Stats n'offre actuellement pas de filtre post_type. Vous pouvez en implémenter vous-même de plusieurs façons. L'idée de base est de parcourir le post_ids pour déterminer ceux qui ont un post_type de post. Dans votre boucle, vous pouvez utiliser quelque chose comme ceci:

$post = get_post($p['post_id']);
if ( !isset($post->post_type) || $post->post_type != 'post' )
    continue;
if ( has_post_thumbnail( $post->ID ) )
    $thumbnail = get_the_post_thumbnail( $post->ID );
else
    $thumbnail = '';
2
Andy

En ce qui concerne les pages à exclure, si vous ne disposez que de quelques pages, vous pouvez le faire comme décrit ici :

Dans votre boucle foreach, avant le <li>, ajoutez:

 $postTitle = $single_post['post_title'];
    if($postTitle == 'Home page') {
1
Lea Cohen