2016-02-24 77 views

回答

0

對於幾種不同的解決方案,可能是爲元值使用JSON編碼格式。請注意,這不是用戶友好的,但肯定會達到你想要的。

您當然需要先生成json編碼值並確保它們的格式正確。這樣做的一個方法是使用PHP的內置函數:

// Set up your array of values, then json_encode them with PHP 
$values = array(
    array('key' => 'my_key', 
     'value' => 'my_value', 
     'operator' => 'IN' 
    ), 
    array('key' => 'other_key', 
     'value' => 'other_value', 
    ) 
); 

echo json_encode($values); 
// outputs: [{"key":"my_key","value":"my_value","operator":"IN"},{"key":"other_key","value":"other_value"}] 

用法示例中的簡碼:

[my-shortcode meta='[{"key":"my_key","value":"my_value","operator":"IN"},{"key":"other_key","value":"other_value"}]'] 

,然後你會在你的簡碼功能解析出來,像這樣:

function my_shortcode($atts) { 
    $meta = $atts['meta']; 
    // decode it "quietly" so no errors thrown 
    $meta = @json_decode($meta); 
    // check if $meta set in case it wasn't set or json encoded proper 
    if ($meta && is_array($meta)) { 
     foreach($meta AS $m) { 
      $key = $m->key; 
      $value = $m->value; 
      $op = (! empty($m->operator)) ? $m->operator : ''; 

      // put key, value, op into your meta query here.... 
     } 
    } 
} 

備用方法
另一種方法是使你的紹爾TCODE接受他們任意數量的,相匹配的數字指標,比如:

[my-shortcode meta-key1="my_key" meta-value1="my_value" meta-op1="IN 
    meta-key2="other_key" meta-value2="other_value"] 

然後,在你的簡碼功能,「手錶」這些價值觀和膠水起來自己:

function my_shortcode($atts) { 
    foreach($atts AS $name => $value) { 
     if (stripos($name, 'meta-key') === 0) { 
      $id = str_ireplace('meta-key', '', $name); 
      $key = $value; 
      $value = (isset($atts['meta-value' . $id])) ? $atts['meta-value' . $id] : ''; 
      $op = (isset($atts['meta-op' . $id])) ? $atts['meta-op' . $id] : ''; 

      // use $key, $value, and $op as needed in your meta query 

     } 
    } 
} 
+0

什麼可能會導致元查詢不起作用? 這很好,但在我需要的特定網站中,WP_Query只是忽略了meta_query數組。所以查詢返回我的帖子,甚至所有其他過濾器參數都可以工作,但不是meta_query。 不,絕對沒有打字錯誤或類似的東西。我已經嘗試了許多個小時的所有工作,複製了不同來源的相關代碼部分,嘗試了不同的自定義字段......但一切都沒有成功。 在我的主題或插件中是否有任何其他代碼可以阻止元數據查詢工作? – user51398

+0

我很樂意提供幫助,但這需要成爲一個新問題。開始一個新的問題,確保它包含關於**如何構建您的元查詢的相關信息,然後人們可以提供幫助。 (你可以通過添加問題來「ping」我,然後用@cale_b發表評論,我會知道你發佈了這個問題) –

相關問題