로드 시간에 미치는 영향을 확인하기 위해 사용자 지정 SQL을 테스트하려는 경우이 쿼리 스와핑을 시도 할 수 있습니다.
/**
* Restrict the potential slow query in the meta_form() to the current post ID.
*
* @see http://wordpress.stackexchange.com/a/187712/26350
*/
add_action( 'add_meta_boxes_post', function( $post )
{
add_filter( 'query', function( $sql ) use ( $post )
{
global $wpdb;
$find = "SELECT meta_key
FROM $wpdb->postmeta
GROUP BY meta_key
HAVING meta_key NOT LIKE '\\\_%'
ORDER BY meta_key
LIMIT 30";
if( preg_replace( '/\s+/', ' ', $sql ) === preg_replace( '/\s+/', ' ', $find )
&& $post instanceof WP_Post
) {
$post_id = (int) $post->ID;
$sql = "SELECT meta_key
FROM $wpdb->postmeta
WHERE post_id = {$post_id}
GROUP BY meta_key
HAVING meta_key NOT LIKE '\\\_%'
ORDER BY meta_key
LIMIT 30";
}
return $sql;
} );
} );
여기서 우리는 add_meta_boxes_{$post_type}
후크를 사용합니다 $post_type = 'post'
.
여기서 전체 쿼리를 교체하지만 동적 한계를 지원하도록 조정할 수도 있습니다.
바라건대 당신의 요구에 맞게 조정할 수 있습니다.
최신 정보:
이 잠재적으로 느린 SQL 코어 쿼리는 이제 WP 버전 4.3에서 조정되었습니다.
SELECT meta_key
FROM wp_postmeta
GROUP BY meta_key
HAVING meta_key NOT LIKE '\\_%'
ORDER BY meta_key
LIMIT 30
에:
SELECT DISTINCT meta_key
FROM wp_postmeta
WHERE meta_key NOT BETWEEN '_' AND '_z'
HAVING meta_key NOT LIKE '\_%'
ORDER BY meta_key
LIMIT 30;
자세한 내용 은 코어 티켓 # 24498 을 확인하십시오 .