web-dev-qa-db-fra.com

Trier les messages en fonction du nombre de vues ne fonctionne pas

J'utilise l'extrait de code ci-dessous pour obtenir le nombre de vues de chaque publication sur mon sidebar.php. tout fonctionne mais le tri ne fonctionne pas. de plus, il ne reçoit pas 4 messages, il ne montre que 1 message bien que j'ai écrit 'numberposts' => 4. Je suppose que le problème vient de post-requête. car lorsque je suis sur la page d'accueil, le dernier message du site Web n'est pas dans mon type de message personnalisé. (par exemple, le message "Hello World!") lorsque je suis dans la page d'archives, il donne le dernier message de mon type de message personnalisé. Quelqu'un peut-il trouver le problème? Merci

LA FONCTION :

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

LE CODE J'AI AJOUTER AU SIMPLE.PHP:

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

LE CODE QUE J'UTILISE COMME POST DEMANDE D'OBTENTION ET TRI DES ENVOIS:

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
Payam Shakibafar

Votre code n'a pas de sens.

  1. Vous utilisez query_posts(), ce que vous ne devriez jamais faire, mais cela ne fait que masquer la requête principale. Vous n'utilisez cependant pas la requête masquée.
  2. Vous utilisez ensuite get_posts() avec une liste d'arguments non définie (dans la mesure où le code affiché indique), elle ne retournera donc pas ce que vous attendez.

Je pense que ce que vous recherchez est ceci:

$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