귀하의 질문에 구체적으로 답변하는 것은 매우 어렵습니다. 첫 번째 부분은 쉽습니다. 최근 에 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를 방해하여 유지 관리가 매우 어렵습니다.
직렬화 된 데이터로 검색하거나 주문할 수 없으므로 사용자 정의 필드에 직렬화 된 데이터를 저장하는 데 열심이 아닙니다. 그러나 모든 사용자 ID를 하나의 사용자 정의 필드 아래 배열로 저장하는 것이 좋습니다. 사용자가 게시물을 좋아할 때 사용자 ID로 배열을 업데이트하기 만하면됩니다. 사용자 정의 필드 데이터를 가져오고 ID 배열을 반복하고 ID로 무언가를 수행하는 것은 쉽습니다. 그냥 봐get_post_meta()
사용자 정의 필드를 업데이트하는 것도 쉽습니다. 이를 위해, 당신은 update_post_meta()
당신의 사용자 정의 필드를 만드는 방법을 모르지만 update_post_meta()
확실히 사용하고 싶은 것입니다.
사용자 정의 필드가 업데이트 될 때 이메일 또는 푸시 알림을 보내야하는 경우 다음 후크를 사용할 수 있습니다. ( 컨텍스트 참조update_metadata()
)
결론
이 게시물을 게시하기 직전에 다시 직렬화 된 경로로 이동하기 전에 정렬 된 데이터를 기준으로 정렬하거나 직렬화 된 데이터 내에서 특정 데이터를 검색 할 필요가 없는지 확인하십시오.