В настоящее время я использую Media Category Library, плагин для WordPress, который позволяет пользователю добавлять категории к своим медиафайлам, а затем осуществлять поиск по своим медиафайлам на основе этих категорий с помощью формы поиска по интерфейсу.
https://wordpress.org/plugins/media-category-library/
После тестирования я понял, что если вы нажали несколько категорий в контрольных списках, которые он генерирует, он найдет все медиа из этих категорий, а не медиа, которые были назначены для этих нескольких категорий.
Возьми этот пример.
Если бы я поставил галочку в «Кошках и собаках», я бы хотел, чтобы он нашел Media 3 и проигнорировал два других. Тем не менее, на данный момент, если я поставлю галочки в списке «Кошки и собаки», будут возвращены все 3 элемента мультимедиа.
Похоже, что эти два SQL-запроса находятся там, где есть проблема, но, попробовав много разных вещей, я не могу найти решение своей проблемы.
// create sub query, get term_taxonomy$sub_sql = "SELECT x.term_taxonomy_id FROM " . $wpdb->term_taxonomy . " AS x " .
"INNER JOIN " . $wpdb->terms . " AS t ON x.term_id = t.term_id WHERE " .
"t.slug IN(" . implode( ",", $selected_terms ) . ")";// main query that uses subquery
$sql = "SELECT SQL_CALC_FOUND_ROWS DISTINCT p.ID, p.post_title, p.post_mime_type, p.post_excerpt, p.post_date FROM " . $wpdb->posts . " AS p " . "LEFT JOIN " . $wpdb->term_relationships . " AS r ON p.ID = r.object_id " .
"WHERE r.term_taxonomy_id IN($sub_sql) AND p.post_type='attachment'";
Любая помощь будет принята с благодарностью 🙂
Похоже, вы хотите изменить свой первый запрос на равно.
$sub_sql = "SELECT x.term_taxonomy_id FROM " . $wpdb->term_taxonomy . " AS x " .
"INNER JOIN " . $wpdb->terms . " AS t ON x.term_id = t.term_id WHERE " .
"t.slug like '" . implode(",", $selected_terms) . "%'";
После «,» в имплозе есть пробел, потому что в вашем примере есть пробел, если он не нужен, просто удалите его.
Обновленный код Если вы убедитесь, что условия в определенном порядке, вы можете использовать как. Чтобы исключить одиночные игры и вытащить все кратные.
Других решений пока нет …