對於幾種不同的解決方案,可能是爲元值使用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
}
}
}
什麼可能會導致元查詢不起作用? 這很好,但在我需要的特定網站中,WP_Query只是忽略了meta_query數組。所以查詢返回我的帖子,甚至所有其他過濾器參數都可以工作,但不是meta_query。 不,絕對沒有打字錯誤或類似的東西。我已經嘗試了許多個小時的所有工作,複製了不同來源的相關代碼部分,嘗試了不同的自定義字段......但一切都沒有成功。 在我的主題或插件中是否有任何其他代碼可以阻止元數據查詢工作? – user51398
我很樂意提供幫助,但這需要成爲一個新問題。開始一個新的問題,確保它包含關於**如何構建您的元查詢的相關信息,然後人們可以提供幫助。 (你可以通過添加問題來「ping」我,然後用@cale_b發表評論,我會知道你發佈了這個問題) –