2017-09-19 94 views
0

我正在使用wordpress搜索一些具有一些限制的內容。每次我保存一篇文章,我保存在元相關的職位數組。在wordpress中使用meta_query進行搜索

然後,我正在嘗試搜索所有具有特定帖子作爲相關帖子,我有以下查詢。選定的帖子是我要查找的帖子的ID。

我檢查了$selected_post,它的值如下。

$selected_post = "25"; 

我使用以下說明添加了元值,我使用的是update_post_meta$related_posts包含一個post ID的數組,如下例所示。

  update_post_meta($post->ID, 'related_post', $related_posts); 

查詢

  $arg = array(
       'post_type'   => 'post', 
       'posts_per_page' => 5, 
       'meta_query'  => array(
        'relation' => 'OR', 
        array(
         'key'  => 'related_post', 
         'value'  => array($selected_post), 
         'compare' => 'IN', 
         'type'  => 'STRING' 
        ), 
       ), 
      ); 

我在我的一些現有員額的檢查這個元,我有這樣的事情。

'related_post' => array('15', '25', '46'); 

當我使用WP_Query執行這個查詢,它總是返回我空數組。我想我需要更多的查詢來使這個工作。

任何幫助,將不勝感激。

+0

你的代碼很好 - 你不應該在那裏有''relation'=>'OR''因爲你在yuor meta_query中只有一個條件,但它仍然可以工作。所以它必須要處理數據本身。你確認'$ selected_post'有一個有效的單值嗎?你如何添加'related_post'(例如自定義字段,使用add_post_meta.ACF)以及它是什麼格式?如果您只是查詢單個值,爲什麼不用'='而不是'IN'? – FluffyKitten

+0

@FluffyKitten首先,感謝您的評論。是的,我檢查了'$ selected_post'只有一個值。我會更新我的問題,並向您提供您要求的信息。我在詢問我的'$ selected_post'是否在related_posts數組中,它不是一個單一的值。 –

回答

2

問題是,您試圖查詢related_posts就好像它是一個數組,但實際上它在被添加到數據庫時會被序列化。

上連載陣列

使用WP_Query如果要添加如下元后的數組:

$fruit_array = array('apple', 'orange', 'banana'); 
update_post_meta($post->ID, 'fruit', $fruit_array); 

...在數據庫中fruit值將是:

a:3:{i:0;s:5:"apple";i:1;s:6:"orange";i:2;s:6:"banana";} 

因此,您需要使用LIKE來搜索序列化字符串的值喲你正在尋找。

對於上面的例子,你$args會是這樣:

$args = array(
    'post_type'  => 'post', 
    'posts_per_page' => 5, 
    'meta_query' => array(
      array(
        'key'  => 'fruit', 
        'value' => 'apple', 
        'compare' => 'LIKE', 
      ), 
    ) 
); 


搜索數/職位IDS

在你的情況,這是複雜的,因爲你正在使用帖子ID。郵政ID或號碼不是一個具體問題,但問題是LIKE也將返回部分匹配,因此14的查詢也將返回141,1455等。

基於序列化的字符串的結構,我相信下面應該工作:

$args = array(
    'post_type'  => 'post', 
    'posts_per_page' => 5, 
    'meta_query' => array(
      array(
        'key'  => 'related_post', 
        'value' => '"25"', /* include the double quotes in the search value */ 
        'compare' => 'LIKE', 
      ), 
    ) 
); 

如序列化的字符串變"25";包括價值要搜索應該工作的雙引號的值。