2011-05-13 59 views
4

我使用的鍵部分:http://www.farinspace.com/how-to-create-custom-wordpress-meta-box/函數來創建一些自定義的元框。WordPress的meta_query

我WP_Query看起來是這樣的:

  $args = array(
       'post_type' => 'testimonials', 
       'post_status' => 'publish', 
       'orderby' => checked((bool) $instance['testimonials_random'], true, false) ? 'rand' : 'id', 
       'posts_per_page' => $testimonials_number, 
       'paged' => get_query_var('page'), 
       'meta_query' => array(
        array(
         'key' => '_my_meta["addtosidebar"]', 
         'value' => 'on', 
         'compare' => 'LIKE' 
        ) 
       ) 
      ); 
      $query = new WP_Query($args); 

輸入複選框addtosidebar看起來是這樣的: <input type="checkbox" name="_my_meta[addtosidebar]" <?php checked((bool) $meta['addtosidebar'], true); ?> class="checkbox" />

你有什麼想法,我怎麼可以訪問meta_query的關鍵?

感謝, 錄CIP

回答

4

我不認爲你可以做到這一點作爲教程中,您鏈接到元值存儲在一個數組,然後將其序列化到一個單一的數據庫字段。所以你最終會在數據庫中得到類似的結果:a:4:{s:12:"addtosidebar";s:2:"on";s:3:"foo";s:3:"bar";}

下列元的查詢可能會奏效,但它會更好地使用一個單獨的自定義字段。

'meta_query' => array(
    array(
    'key' => '_my_meta', 
    'value' => 's:12:"addtosidebar";s:2:"on";', 
    'compare' => 'LIKE' 
) 
) 
+1

它是這樣的:' 'meta_query'=>數組( 陣列( '鍵'=> '_my_meta', '值'=> 'addtosidebar', '比較'=> 'LIKE' ) )' – 2011-05-18 08:33:33

1
it was like this: 'meta_query' => array(array('key' => '_my_meta', 'value' => 'addtosidebar', 'compare' => 'LIKE')) – CIPPO Design 

這個工作對我來說,我認爲應該作爲一個答案。有一件事,就像Richard指出的那樣,數據庫中的條目是序列化的。所以'LIKE'基本上只是尋找那個字符串中的'value''addtosidebar'。

例如,如果我有一個元陣列是這樣的:

後1:

$myMeta = array('medium' => 'video', 'sometext' => 'a beautiful video') 

後2:

$myMeta = array ('medium' => 'image', 'sometext' => 'a beautiful image of a video button') 

這意味着,使用'上比較 'LIKE'視頻「將返回,因爲視頻也在第二篇文章的'sometext'值中找到。要停止,我不得不添加引號來限制它:

$query->set('meta_query' , array(
           array(
           'key' => 'blogInfo', 
           'value' => '"video"', 
           'compare' => 'LIKE' 
          ) 
          )); 

希望這將幫助別人的同時,我設法意義。

PS:對不起,我不喜引人注目不夠的,只是發表評論。

相關問題