2012-11-14 108 views
0

此代碼是不是最優的,我苦苦尋找這樣做的更好的方法。效率PHP代碼頭

基本上,你點擊一個按鈕,它發送一個Ajax請求低於所列該文件會從一個WordPress數據庫隨機職位。通常這些是重複的,給人的感覺是它不起作用,爲了解決這個問題,我檢查了當前的id = old id,如果它們是相同的,得到一個新的帖子,但是我還沒有找到一種方法來運行另一個wpquery另一個查詢。

<?php 
    require_once('../../../wp-blog-header.php'); 
    header('HTTP/1.1 200 OK'); 
?> 
    <span id="postss"><?php 
     query_posts(array(
      'cat' => 39, 
      'order' => 'ASC', // ASC 
      'orderby' => 'rand', 
      'showposts' => 1, 
      )); 
     $wp_query->is_archive = true; $wp_query->is_home = false; 
     if (have_posts()) : while (have_posts()) : the_post(); 

     session_start(); 
     if(!isset($_SESSION['oldId'])) 
     { 
      $_SESSION['oldId'] = get_the_id(); 
     }else{ 
      $curId = get_the_id(); 
      if($_SESSION['oldId'] == $curId) 
      { 
       header("Location: http://website.com/testimonialPull.php");  
      }else{ 


    the_content(); 
     } 
     $_SESSION['oldId'] = get_the_id(); 
    } 

    endwhile; endif; 

?> 

所以發送報頭的請求時間約1秒,一個新的職位,以顯示,而第二常其約2 /十分之。有沒有更高效,更快捷的方法?

回答

0

只需修改您的通話query_posts()像這樣:

$args = array(
    'cat' => 39, 
    'order' => 'ASC', // ASC 
    'orderby' => 'rand', 
    'showposts' => 1, 
); 
if (isset($_SESSION['oldId']) { 
    $args['post__not_in'] = array($_SESSION['oldId']); 
} 
query_posts($args); 

post__not_in參數指定的ID將從查詢中排除的數組。

如果您想了解更多關於WP_Query類,它接受的參數(那些比賽與query_posts()接受的) - 見法典頁 - Class Reference/WP Query。 PP:我不明白爲什麼你不只是在init動作鉤子上掛鉤了一個函數,並且詢問到了http://website.com/?pullTestimonial=1(我不確定這是否會緩慢地完成這個過程,但這通常是我的做到這一點)

下面是一個例子代碼:

function fetch_testimonial() { 
    if (isset($_GET['pullTestimonial'])) { 
     // Your code that will be executed goes here 
     exit; 
    } 
} 
add_action('init', 'fetch_testimonial', 10); 

你從這場比賽的勝利是什麼,你並不需要在你的根目錄下有一個文件或某個地方你的鏈接不會像http://website.com/wp-content/themes/mytheme/testimonialPull.php