2015-05-09 357 views
1

我使用WordPress的keremiya主題。如果「most_viewed」選項打開,我試圖在我的自定義文章類型中顯示我查看次數最多的文章。我的自定義帖子類型的名稱是watch。我怎樣才能用我現在的代碼做到這一點?我也使用名爲wp-post views的插件來顯示我側邊欄中的視圖。這是我的查詢。如何在自定義帖子類型中顯示最多查看的帖子

<?php if(get_option('most_viewed') == 'On'): ?> 
    <div class="sidebar-right"> 
    <h2><?php echo get_option('my_title'); ?></h2> 
    <div class="fimanaortala"> 
    <?php $tavsayi = get_option('keremiya_tavsiyesayi'); $tavkat = get_option('keremiya_tavsiyekat');?> 
    <?php query_posts('showposts='.$tavsayi.'&v_orderby=desc&cat='.$tavkat.'') ?> 
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
    <div class="filmana"> 
     <div class="filmsol"> 
     <?php keremiya_resim('80px', '70px', 'izlenen-resim'); ?> 
     </div> 
     <div class="filmsag"> 
      <div class="filmsagbaslik"> 
      <a href="<?php the_permalink() ?>"><?php the_title(); ?></a> 
      </div> 
      <div class="filmsagicerik"> 
      <?php if(function_exists('the_views')) { the_views(); echo " "; } ?> 
      <p><?php nezaman_yazildi(); ?></p> 
      </div> 
      <div class="filmizleme"> 
      <a href="<?php the_permalink() ?>"><img src="<?php bloginfo('template_directory'); ?>/images/filmizle.png" alt="film izle" height="21" width="61" /></a> 
      </div> 
     </div> 
    </div> 
    <?php endwhile; else: ?> 
    <?php endif; ?> 
    <?php wp_reset_query(); ?> 
    </div> 
</div> 

回答

1

您的解決方案(或嘗試,至少)是基於名爲WP-PostViews的插件,我不知道該插件。所以,我不能真的幫你。但是,我可以幫助您解決它,而無需使用此插件或任何其他插件。所以在這裏我們去:

WordPress的有一些東西叫metadata。從這個非常自己的鏈接:

元數據API是一種簡單和標準化的方式來檢索和操作各種WordPress對象類型的元數據。對象的元數據由簡單的鍵值對錶示。對象可能包含多個元數據條目,這些元數據條目共享相同的密鑰,並且其值不同。

這意味着您可以爲您的自定義帖子類型創建元數據,其中包含已被查看的次數。爲此,我們創建一個函數:

<?php 
    function set_views($post_ID) { 
     $key = 'views'; 
     $count = get_post_meta($post_ID, $key, true); //retrieves the count 

     if($count == ''){ //check if the post has ever been seen 

      //set count to 0 
      $count = 0; 

      //just in case 
      delete_post_meta($post_ID, $key); 

      //set number of views to zero 
      add_post_meta($post_ID, $key, '0'); 

     } else{ //increment number of views 
      $count++; 
      update_post_meta($post_ID, $key, $count); 
     } 
    } 

    //keeps the count accurate by removing prefetching 
    remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); 
?> 

這將根據帖子ID在每次查看帖子時增加一個計數器。當然,我們必須在代碼中的某個地方調用這個函數,以便它真正運行。你可以通過兩種方式來做到這一點:你可以在單個模板上調用這個函數(我相信它叫做single-watch.php),或者你可以添加一個簡單的跟蹤器。我贊成第二種選擇,因爲它可以讓您的單一後循環更清潔。您可以通過這種方式實現這種跟蹤:

<?php 
    function track_custom_post_watch ($post_ID) { 
     //you can use is_single here, to track all your posts. Here, we're traking custom post 'watch' 
     if (!is_singular('watch')) return; 

     if (empty ($post_ID)) { 

      //gets the global post 
      global $post; 

      //extracts the ID 
      $post_ID = $post->ID;  
     } 

     //calls our previously defined methos 
     set_views($post_ID); 
    } 
    //adds the tracker to wp_head. 
    add_action('wp_head', 'track_custom_post_watch'); 
?> 

你走了。現在,WordPress檢查用戶是否正在訪問對應於單個帖子的手錶。如果是,則增加櫃檯。

現在剩下的唯一事情就是查詢具有最多視圖數量的帖子。這很容易使用WP_Query來實現。當你創建你的循環,做這樣的事情:

<?php 
    $query = new WP_Query(array(
      'post_type'  => 'watch', //your post type 
      'posts_per_page' => 1, 
      'meta_key'  => 'views', //the metakey previously defined 
      'orderby'  => 'meta_value_num', 
      'order'   => 'DESC' 
     ) 
    ); 

    while ($query->have_posts()) { 
     $query->the_post(); 
     //whatever code you want 
    } 
?> 

我一直在我的答案PHP,這樣你就可以適應您的加價要求。我也假設你的帖子類型確實叫手錶。我希望這一切都能幫助你。如果您想以稍微不同的方式查詢您的帖子,我建議您閱讀WP_Query文檔。乾杯。

+0

當我試圖將此添加到我的邊欄我收到死亡的白色屏幕。哈哈:D我完全失去了。我很新的php –

+0

我的意思是它沒有工作不是死亡的白色屏幕。 –

+0

你應該把第一個兩個方法放到'functions.php'文件中。第三個是wp_loop的一個非常原始的版本,它應該可以在你的邊欄中正常工作。只要不要忘記'wp_reset_query();'在完成循環 –

相關問題