it-swarm.com.de

Das Sortieren von Beiträgen nach Anzahl der Aufrufe funktioniert nicht

Ich benutze das Code-Snippet unten, um die Anzahl der Aufrufe jedes Posts in meiner sidebar.php zu ermitteln. alles funktioniert aber die sortierung funktioniert nicht. es werden auch nicht 4 posts angezeigt, es wird nur 1 post angezeigt, obwohl ich 'numberposts' => 4 geschrieben habe. Ich denke, das Problem kommt von der Post-Abfrage. Denn wenn ich auf der Homepage bin, wird der letzte Beitrag der Website nicht in meinem benutzerdefinierten Beitragstyp angezeigt. (z. B. der Beitrag "Hello World!") Wenn ich auf der Archivseite bin, wird der letzte Beitrag meines benutzerdefinierten Beitragstyps angezeigt. Kann jemand das Problem finden? Vielen Dank

DIE FUNKTION :

function getPostViews($postID){
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
        return '0';
    }
    return $count;
}

// function to count views.
function setPostViews($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}

DER CODE, DEN ICH ZU SINGLE.PHP HINZUFÜGEN:

<?php setPostViews(get_the_ID()); ?>

DER CODE, DEN ICH ALS POST BENUTZE, UM POSTS ZU ERHALTEN UND ZU SORTIEREN:

query_posts(array(
        'numberposts'  => 4,  /* get 4 posts, or set -1 for all */
        'orderby'      => 'meta_value_num',  /* this will look at the meta_key you set below */
        'meta_key'     => 'post_views_count',
        'order'        => 'DESC',
        'post_type' => array('news','database'),
        'post_status'  => 'publish'
    ));
    $myposts = get_posts( $args );
        foreach( $myposts as $mypost ) { ?>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php
        }
        wp_reset_query();
    ?>
1

Dein Code ergibt keinen Sinn.

  1. Sie verwenden query_posts(), was Sie niemals tun sollten, aber alles, was Sie tun müssen, ist die Hauptabfrage zu blockieren. Sie verwenden die überfüllte Abfrage jedoch nicht.
  2. Sie verwenden dann get_posts() mit einer undefinierten Argumentliste (sofern der bereitgestellte Code dies angibt), sodass nicht das zurückgegeben wird, was Sie erwarten.

Ich denke, dass Sie folgendes suchen:

$args = array(
  'posts_per_page'  => 4,  /* get 4 posts, or set -1 for all */
  'orderby'      => 'meta_value_num',  /* this will look at the meta_key you set below */
  'meta_key'     => 'post_views_count',
  'order'        => 'DESC',
  'post_type' => array('news','database'),
  'post_status'  => 'publish'
);
$myposts = new WP_Query( $args );
if ($myposts->have_posts()) {
  while ($myposts->have_posts()) {
    $myposts->the_post(); ?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><?php
  }
}
5
s_ha_dum