Сложно конкретно ответить на ваш вопрос. Первая часть проста, хотя. Я недавно сделал что-то похожее на stackoverflow
Мета-ключи сравниваются и точно совпадают. WP_Query
у нас нет средств для настройки этого поведения с помощью простого параметра, но мы всегда можем сами его ввести, а затем настроить posts_where
предложение для LIKE
сравнения мета-ключей.
ФИЛЬТР
Это просто базовый фильтр, настройте его по мере необходимости.
add_filter( 'posts_where', function ( $where, \WP_Query $q )
{
// Check for our custom query var
if ( true !== $q->get( 'wildcard_on_key' ) )
return $where;
// Lets filter the clause
$where = str_replace( 'meta_key =', 'meta_key LIKE', $where );
return $where;
}, 10, 2 );
Как видите, фильтр срабатывает только тогда, когда мы устанавливаем наш новый пользовательский параметр wildcard_on_key
в true
. Когда это проверяется, мы просто меняем =
компаратор на LIKE
компаратор
Просто отметим, что LIKE
сравнения по своей природе обходятся дороже, чем другие сравнения
ВОПРОС
Вы можете просто запросить ваши сообщения, как следует, чтобы получить все сообщения с мета-ключами like_status_{user_id}
$args = [
'wildcard_on_key' => true,
'meta_query' => [
[
'key' => 'like_status_',
'value' => 1,
]
]
];
$query = new WP_Query( $args );
ДРУГОЙ ВОПРОС
Пользовательские поля не влияют на производительность, вы можете прочитать мой пост на эту тему здесь . Однако я обеспокоен тем, что вы говорите, что каждый пост может иметь сотни или тысячи лайков. Это может повлиять на производительность при получении и кэшировании такого большого количества данных настраиваемых полей. Он также может засорить вашу базу данных огромным количеством ненужных данных настраиваемых полей, что делает его довольно сложным в обслуживании.
Я не очень большой поклонник хранения сериализованных данных в пользовательских полях, так как нельзя выполнять поиск или сортировку по сериализованным данным. Однако я бы предложил хранить все идентификаторы пользователя в массиве под одним настраиваемым полем. Вы можете просто обновить массив с идентификатором пользователя, когда пользователю нравится сообщение. Получить данные настраиваемого поля и циклы по массиву идентификаторов и сделать что-то с идентификаторами очень просто. Просто посмотрите наget_post_meta()
Обновление настраиваемого поля также легко. Для этого вам нужно разобраться update_post_meta()
, я не знаю, как вы создаете свои настраиваемые поля, но update_post_meta()
это определенно то, что вы хотели бы использовать.
Если вам нужно отправлять электронные письма или push-уведомления при обновлении настраиваемого поля, у вас есть следующие хуки, с которыми можно работать. ( См. update_metadata()
Для контекста )
ВЫВОД
Непосредственно перед тем, как я опубликую это, еще раз, прежде чем идти по сериализованному маршруту, убедитесь, что вам не нужно будет сортировать отсортированные данные или искать конкретные данные внутри сериализованных данных.