web-dev-qa-db-ja.com

ビュー数による投稿の並べ替えが機能しない

下のコードスニペットを使用して、sidebar.phpの各投稿のビュー数を取得します。すべてはうまくいきますが、ソートはできません。私は'numberposts' => 4を書いたけれどもまたそれは4つのポストを得ない、それは1つのポストしか示していない。私は問題がポストクエリーから来ると思います。私がホームページにいるとき、それは私のカスタム投稿タイプではなくウェブサイトの最後の投稿を表示するからです。私がアーカイブページを開いているとき(たとえば、 "Hello World!"の投稿)、それは私のカスタム投稿タイプの最後の投稿を与えます。誰もが問題を見つけることができますか?ありがとう

機能:

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

私がSINGLE.PHPに追加したコード:

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

私がPOSTとして使用しているコードは、郵便物を入手して保管するには

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

あなたのコードは意味がありません。

  1. query_posts()を使用しますが、これは絶対にしてはいけませんが、実行されるのはすべて、主なクエリを破壊することだけです。あなたはclobberedクエリを使用しません。
  2. それからget_posts()を未定義の(リストされたコードが示す限り)引数リストと共に使用するので、期待したものを返すことはありません。

私はあなたが探しているのはこれだと思います:

$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