Конкретно відповісти на ваше запитання досить складно. Перша частина, проте, легка. Нещодавно я робив щось подібне на 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 );
ІНШІ ПИТАННЯ
Спеціальні поля не впливають на продуктивність, ви можете прочитати мою публікацію з цього приводу тут . Мене все ж хвилює те, що ви говорите, що кожен пост може мати сотні чи тисячі лайків. Це може вплинути на отримання продуктивності та кешування такої великої кількості спеціальних польових даних. Він також може засмітити ваш db величезною кількістю непотрібних спеціальних даних про поле, що робить його досить важким у підтримці.
Я не є великим прихильником зберігання серіалізованих даних у користувацьких полях, оскільки не можна шукати чи замовляти серіалізовані дані. Однак я б радив зберігати всі ідентифікатори користувача у масиві під одним спеціальним полем. Ви можете просто оновити масив з ідентифікатором користувача, коли користувачеві подобається публікація. Отримати користувальницькі дані про поле та прокрутити їх через масив ідентифікаторів та зробити щось із ідентифікаторами дуже просто. Просто погляньтеget_post_meta()
Оновлення спеціального поля також легко. Для цього вам потрібно буде вивчити update_post_meta()
, я не знаю, як ви створюєте свої власні поля, але update_post_meta()
це, безумовно, щось, що ви хотіли б використати.
Якщо вам потрібно надсилати електронні листи чи надсилати сповіщення, коли користувацьке поле оновлюється, у вас є такі гачки, з якими можна працювати. ( Див. update_metadata()
Контекст )
ВИСНОВОК
Перед тим, як я опублікую це, ще раз, перш ніж відправлятися по серіалізованому маршруту, переконайтеся, що вам не потрібно буде сортувати за відсортованими даними або шукати конкретні дані всередині серіалізованих даних.