Класс $wpdb включает в себя метод $wpdb->prepare(), который очищает и делает безопасным сам запрос, основываясь на типах данных (строка, число, число с плавающей точкой).
Но в нем нет простого способа для санирования внутри структуры «IN». Попробуем это исправить.
// Получим записи. // Вернет 'array(1, 3, 5, 8, 13, [...])' $special_entries = get_option( 'entries' ); // Посчитаем количество записей $how_many = count( $special_entries ); // Подготовим нужное количество плейсхолдеров. // Если нужны строки, а не числа - используйте '%s' $placeholders = array_fill( 0, $how_many, '%d' ); // Склеим плейсхолдеры в строку. // Вернёт '%d, %d, %d, %d, %d, [...]' $format = implode( ', ', $placeholders ); // Вставим плейсхолдеры в запрос $query = " SELECT ID, post_title, post_name, post_parent FROM $wpdb->posts WHERE post_parent IN( $format )"; // Выполним безопасно запрос и получим данные $results = $wpdb->get_results( $wpdb->prepare( $query, $special_entries ) );
Ссылки
Источник: https://www.kobzarev.com/wordpress/sanitizing-queries-with-in-clauses-with-wpdb/