Укажите результаты поиска на основе нескольких категорий в WordPress.

В настоящее время я использую Media Category Library, плагин для WordPress, который позволяет пользователю добавлять категории к своим медиафайлам, а затем осуществлять поиск по своим медиафайлам на основе этих категорий с помощью формы поиска по интерфейсу.

https://wordpress.org/plugins/media-category-library/

После тестирования я понял, что если вы нажали несколько категорий в контрольных списках, которые он генерирует, он найдет все медиа из этих категорий, а не медиа, которые были назначены для этих нескольких категорий.

Возьми этот пример.

  • Медиа 1 категории = «Кошки»
  • Медиа 2 категории = «Собаки»
  • Медиа 3 категории = «Собаки, Кошки»

Если бы я поставил галочку в «Кошках и собаках», я бы хотел, чтобы он нашел 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'";

Любая помощь будет принята с благодарностью 🙂

0

Решение

Похоже, вы хотите изменить свой первый запрос на равно.

$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) . "%'";

После «,» в имплозе есть пробел, потому что в вашем примере есть пробел, если он не нужен, просто удалите его.

Обновленный код Если вы убедитесь, что условия в определенном порядке, вы можете использовать как. Чтобы исключить одиночные игры и вытащить все кратные.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]