@ शैली के उत्तर से एक और मामूली सुधार।
मेरे पास ऐसे मामले हैं जहां आईडी को स्ट्रिंग्स के रूप में संग्रहीत किया गया है (जैसे कि जब एक फॉर्म इनपुट से लिया जाता है) और पूर्णांक (जैसे update_post_meta($post_id, authorized_users', array(get_current_user_id()));
)। यह उस तरह के जाने-माने मुद्दे की तरह है, जिसके साथ wp_set_object_terms()
आप टर्म आईडी का इस्तेमाल कर सकते हैं, ताकि आप शब्द सेट कर सकें, लेकिन अगर आप उन्हें पूर्णांक के रूप में नहीं डालते हैं, तो आप उन नामों के साथ उन संख्याओं के साथ नए शब्द बनाने की 50% संभावना रखते हैं। बजाय।
इसका परिणाम उन्हें अलग-अलग क्रमबद्ध सरणी में संग्रहीत किया जा सकता है, जैसा कि मेरे परीक्षण स्थल के डेटाबेस से ऐसे मामले के अंश से देखा जा सकता है:
a:1:{i:0;s:1:"1";} // 's' for 'string', also note the double quotes
a:1:{i:0;i:1;} // 'i' for 'integer', no quotes
उपरोक्त दोनों, जब के माध्यम से खिलाया print_r()
जाएगा के रूप में प्रस्तुत करना होगा
Array
(
[0] => 1
)
इसे ठीक करने के लिए, मैंने एक स्ट्रिंग के बजाय एक पूर्णांक के रूप में मान डालने वाले क्वेरी के meta_query
एक relation
और संस्करण को जोड़कर एक मामूली घुमाव बनाया ।
यहाँ अंतिम परिणाम है:
'meta_query' => array(
'relation' => 'OR', // Lets it know that either of the following is acceptable
array(
'key' => 'bcm_enm_authorized_users',
'value' => serialize(strval(get_current_user_id())), // Saved as string
'compare' => 'LIKE'
),
array(
'key' => 'bcm_enm_authorized_users',
'value' => serialize(intval(get_current_user_id())), // Saved as integer
'compare' => 'LIKE'
),
),
संपादित करें: बस एहसास हुआ कि यह विधि सरणी अनुक्रमित के साथ टकराव के जोखिम को चला सकती है, जो किसी व्यक्ति को सामग्री में अवैध पहुंच की अनुमति दे सकती है यदि वे सरणी में नहीं हैं, लेकिन उनकी उपयोगकर्ता आईडी एक सूचकांक के रूप में दिखाई देती है। इस तरह से, जबकि यह काम करता है यदि आपके पास इस मुद्दे पर चर्चा की गई है, तो बेहतर अभ्यास यह सुनिश्चित करना है कि आप जिन मूल्यों को खोजना चाहते हैं, उन्हें सहेजने से पहले तार के रूप में ढाला जाए ताकि आप @ स्टाइल विधि का उपयोग कर सकें।