Попытка построить поиск, который ищет не только значения по умолчанию (заголовок, контент и т. Д.), Но и определенное настраиваемое поле.
Мой текущий запрос:
$args = array(
'post_type' => 'post',
's' => $query,
'meta_query' => array(
array(
'key' => 'speel',
'value' => $query,
'compare' => 'LIKE'
)
)
);
$search = new WP_Query( $args )
...
Это возвращает посты, которые соответствуют как поисковому запросу, так и мета-запросу, но я также хотел бы, чтобы он также возвращал посты, в которых он просто соответствует одному из них.
Любые идеи?
Ответы:
Я часами искал решение этой проблемы. Объединение массивов - это не тот путь, особенно когда запросы сложные, и вы должны иметь возможность добавлять их к мета-запросам в будущем. Решение, которое упрощенно выглядит, состоит в том, чтобы изменить 's' на то, которое позволяет искать заголовки и мета-поля.
Использование:
источник
Много кода можно уменьшить, используя модифицированную версию этого ответа .
источник
$result->post_count = count( $result->posts );
потому что иначе я получал только 1 результат.Я немного оптимизировал ответ @Stabir Kira
Теперь вы можете осуществлять поиск по (заголовок, содержание, выделение) или (мета-поле) или (оба).
источник
Согласно предложению Ника Перкинса , мне пришлось объединить два запроса следующим образом:
источник
Ну, это своего рода хак, но это работает. Вам необходимо добавить фильтр posts_clauses. Эта проверка функции фильтра для любого слова запроса существует в настраиваемом поле «speel», а оставшийся запрос остается неизменным.
источник
у меня была такая же проблема, для моего нового сайта я просто добавил новую мета "заголовок":
functions.php
А потом .. просто добавьте что-то вроде этого:
Что вы думаете об этом обходном пути?
источник
Все вышеперечисленные решения возвращают результаты, только если в метаключе speel существует совпадение. Если у вас есть результаты в другом месте, но не в этой области, вы ничего не получите. Никто не хочет этого.
Требуется левое соединение. Следующее создаст один.
источник
Это отличное решение, но вам нужно исправить одну вещь. Когда вы вызываете 'post__in', вам нужно установить массив идентификаторов, а $ unique - это массив постов.
пример:
источник
Ответ @ satbir-kira прекрасно работает, но он будет искать только по мета и названию поста. Если вы хотите, чтобы он осуществлял поиск по мета, названию и содержимому, вот измененная версия.
И вот его использование:
Заменить
$get['search']
на значение поискаисточник