2015-07-20 90 views
0
WordPress的瞬態

希望你可以幫我這樣的場景:動態生成的名稱作爲函數參數

我有不同的文章類型簡碼功能裏面的幾個查詢。 現在我試圖用瞬變來存儲這些查詢。 但是這些瞬變需要爲每個頁面調用shortcode的唯一名稱。

$trans_posts_golfcourse_ = 'trans_posts_golfcourse_'.$landingpage; 

if(false === ($$trans_posts_golfcourse_ = get_transient('trans_posts_golfcourse_'))) { 

    $args = array (
     'posts_per_page'=> 5, 
     'post__in'  => $posts_golfcourse, 
     'post_type'  => 'golfcourse', 
     'post_status' => 'publish', 
     'cache_results' => false, 
    ); 

    $$trans_posts_golfcourse_ = new WP_Query($args); 

    set_transient('trans_posts_golfcourse_', $$trans_posts_golfcourse_, 60*60*4); 
} 

動態生成的變量名是

$$trans_posts_golfcourse_ 

但如何,這都看起來像作爲參數?:提前

get_transient('trans_posts_golfcourse_') 

謝謝!

編輯:用於動態可變發現溶液作爲參數 參數(串)具有將要產生的方式作爲變量名相同:

get_transient('trans_posts_golfcourse_'.$landingpage) 

完整代碼:

$trans_posts_golfcourse_ = 'trans_posts_golfcourse_'.$landingpage; 
if(false === (${$trans_posts_golfcourse_} = get_transient('trans_posts_golfcourse_'.$landingpage))) { 

    $args = array (
     'posts_per_page'=> 5, 
     'post__in'  => $posts_golfcourse, 
     'post_type'  => 'golfcourse', 
     'post_status' => 'publish', 
     'cache_results' => false, 
    ); 

    ${$trans_posts_golfcourse_} = new WP_Query($args); 

    set_transient('trans_posts_golfcourse_'.$landingpage, ${$trans_posts_golfcourse_}, 60*60*4); 
} 

編輯:瞬態不減少查詢,雖然瞬態似乎被正確調用。有人有想法嗎?

+0

添加您的完整循環,一切都在瞬間內。看看[這篇文章](http://wordpress.stackexchange.com/a/160618/31545)我已經完成了[wordpress.se]。請注意,您應該創建一個字符串,而不是像示例中的數組,因爲簡碼不能返回數組,只是字符串 –

+0

感謝Pieter!這是絕對正確的。我昨晚通過以下方式管理它: '\t $ transient_key ='trans_markers_'。 $ PAGE_ID; \t $ transient = get_transient($ transient_key); \t if(!empty($ transient)){return $ transient; } \t ...做...查詢 \t set_transient($時,$ transient_key,$ transient_time); \t return $ out;' – Funkateer

+0

您應該將其作爲答案發布。評論中的代碼完全不可讀,因此在評論中毫無用處。 ;-) –

回答

1

解決方法是將查詢循環放入瞬態中。 兩種方法是可行的:

  1. 在函數(簡碼遠東)

    function get_content($dynamic_var){ 
         $transient_time = 60*60*4; 
         $transient_name = "transient_name_" . $dynamic_var; 
    
         $content = get_transient($transient_key); 
         if(!empty($content) ) { return $content; } 
    
         $args = array (''); 
         $query = new WP_Query($args); 
    
         $content = ''; 
         if($query->have_posts()): 
          while($query->have_posts()) : $query->the_post(); 
           $content.= 'some_content'; 
          endwhile; wp_reset_postdata(); 
         endif; 
    
         set_transient($transient_name, $content, $transient_time); 
         return $content; 
        } 
    
  2. 內模板

     $transient_time = 60*60*4; 
         $transient_name = 'transient_name_' . $page_id; 
         // ${$transient_name} > name of variable is dynamically created by 
         // the value of variable $transient_name (search for > php variable variables) 
    
         $content = ''; 
         if(false === (${$transient_name} = get_transient($transient_name))) { 
          $args = array (''); 
          $query = new WP_Query($args); 
    
          $content_inner = ''; 
          if($query->have_posts()): 
           while($query->have_posts()) : $query->the_post(); 
            $content_inner.= 'some_content'; 
           endwhile; wp_reset_postdata(); 
          endif; 
    
          set_transient($content_inner, ${$transient_name}, $transient_time); 
         } 
         $content.= ${$transient_name}; 
    
+0

+1發佈解決方案,也發佈兩種不同的方法。請記住接受你自己的答案作爲正確答案。我認爲你必須等待近兩天才能做到這一點,所以不要忘記;-) –