У меня большой сайт WP с около 2 тыс. Постов и 150 тыс. Постметов.При просмотре большой категории архив загружается очень медленно из-за запроса WP, который ищет избранные сообщения, чтобы показать их в первую очередь.Я знаю, что конечной целью является оптимизация таблицы postmeta, но сейчас я хотел бы знать, есть ли какой-нибудь возможный способ оптимизации мета-запроса (один внизу) ниже.
Я провел некоторую отладку (см. //comments
) и обнаружил, что 'compare' => '!='
вызывает очень медленный запрос.Я также обнаружил, что ''
или '<'
значительно ускоряет запрос, с теми же результатами, но я не уверен, что это правильный путь.Пожалуйста, дайте мне знать, если есть способ ускорить этот запрос.Спасибо
function appthemes_addon_on_top_query( $wp_query ){
$addon_type = $wp_query->get( 'addon_on_top' );
if( ! $addon_type || ! appthemes_addon_exists( $addon_type ) ) {
return;
}
$addon_info = appthemes_get_addon_info( $addon_type );
$flag_key = $addon_info['flag_key']; //custom field for featured posts
$meta_query = (array) $wp_query->get( 'meta_value', 1 );
$meta_query = array_filter( $meta_query );
$meta_query[] = array(
'relation' => 'OR',
array(
'key' => $flag_key,
'compare' => 'NOT EXISTS',
),
array(
'relation' => 'OR',
//Deleting the array below makes the query quick, but i need it to show featured posts first
array(
'key' => $flag_key,
'value' => 1,
),
//Deleting the array below makes the query quick, but i need it to properly sorting the posts by date (see below: $wp_query->set( 'orderby')
array(
'key' => $flag_key,
'value' => 1,
'compare' => '!=', //It is about this comparison. '' or '<' makes the query quick, but i am not sure if that is a proper replacement. Also not sure why '!=' makes it this slow.
),
),
);
$wp_query->set( 'meta_query', $meta_query );
$wp_query->set( 'orderby', array( 'meta_value' => 'DESC', 'date' => 'DESC' ) );
}