Поскольку ваши данные хранятся в виде сериализованного массива PHP, вам нужно сначала вытащить общие c данные и l oop поверх них, либо вам нужно будет выполнить запрос LIKE. Этот пост углубляется в детали, но я покажу вам, как выполнить запрос LIKE для WordPress.
WordPress имеет специальную функцию для правильного экранирования параметров LIKE, которая называется wpdb::esc_like
. После выполнения этого SQL должен выглядеть примерно так:
SELECT
user_id
FROM
wp_usermeta
WHERE
meta_key='addition_qualification'
AND
(
meta_value LIKE %s
OR
meta_value LIKE %s
)
После того, как вы вызовете команду prepare для этого SQL, он будет преобразован в:
SELECT
user_id
FROM
wp_usermeta
WHERE
meta_key='addition_qualification'
AND
(
meta_value LIKE '%Allgemeine Pharmazie%'
OR
meta_value LIKE '%Geriatrische Pharmazie%'
)
Это не Это не самое идеальное решение, но, вероятно, лучшее для работы с этим типом данных в контексте WordPress. Вот код, который создает вышеуказанное:
$zuqual = $this->userInput["Zuquali"];
if (!empty($zuqual)) {
$likeTemplate = ' meta_value LIKE %s ';
// This will hold the above string repeated once for each item in our search array
$likes = [];
// This will hold sanitized values to perform LIKE searches, each surrounded by percent signs
$params = [];
foreach ($zuqual as $item) {
$likes[] = $likeTemplate;
$params[] = '%' . $this->wpdb->esc_like($item) . '%';
}
// If we have more than one search term, this will join with the OR, otherwise it will be left as-is
$likeSql = implode(' OR ', $likes);
// Create our query, remembering to surround the nested part with parentheses
$sql = "SELECT user_id FROM wp_usermeta WHERE meta_key='addition_qualification' AND (" . $likeSql . ")";
// Pass our escaped params in
$prepared = $this->wpdb->prepare($sql, $params);
$result = $this->wpdb->get_col($prepared);
}