it-swarm.com.de

Verwenden Sie von stats_get_csv, um eine Liste der beliebtesten Beiträge von Ansichten mit Miniaturansichten zurückzugeben

Ich habe kürzlich erfahren, dass Sie, wenn Sie WordPress.com Stats installiert haben, stats_get_csv() nutzen können (Teil des WordPress.com Stats Plugins ).

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

So habe ich jetzt meinen Code eingerichtet. Das Problem ist, dass sowohl Seiten als auch Beiträge angezeigt werden. Außerdem möchte ich das vorgestellte Miniaturbild neben jedem Element sowie eine Reihe benutzerdefinierter Beitragstypen hinzufügen. Ist das möglich? Wenn ja, kann mir jemand helfen?

2
jwp

Die API gibt die folgenden Spalten zurück, wenn Sie die Tabelle postviews abfragen:

  • datum
  • post_id
  • post_title
  • post_permalink
  • ansichten

Für mein Blog war die Spalte post_id entweder leer oder 0 (für die Homepage). Wenn Sie dort also keine guten Werte haben, müssen Sie anhand des post_permalink-Werts ermitteln, ob es sich um eine Seite oder einen Beitrag handelt (über eine Abfrage in der Datenbank oder eine Regex in der URL?), Und dann Ihre Datenbank nach dem abfragen post thumbnail, da die WordPress.com-Statistik-API keine Informationen dazu sammelt.

3
Jan Fabry

Die WordPress.com Stats-API bietet derzeit keinen post_type-Filter. Sie können einen selbst auf verschiedene Arten implementieren. Die Grundidee ist, die post_ids zu durchlaufen, um herauszufinden, welche einen post_type von post haben. In Ihrer Schleife können Sie Folgendes verwenden:

$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

Was die ausschließenden Seiten angeht, können Sie, wenn Sie nur wenige Seiten haben, wie hier beschrieben vorgehen :

In Ihrer foreach-Schleife fügen Sie vor dem <li> Folgendes hinzu:

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