WordPress и meta_form() на странице редактирования записи
Здравствуйте!
У меня на сайте больше 10.000 записей и ~100.000 доп. полей, в результате при заходе в меню редактирования записи WordPress выводит все кастомные поля поста (meta_form())
В результате вылезает такая картина:
# Query_time: 0.746003 Lock_time: 0.000072 Rows_sent: 22 Rows_examined: 96794 SET timestamp=1456433729; 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;
т.е. запрос обрабатывается 0.7 сек.
Погуглив я нашел такую функцию:
/**
* 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;
} );
} );
Но она к сожалению не работает. Т.е. не идет почему-то замена sql запроса. Сам 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
Если подставить вместо $post_id ID поста - запрос занимает 0.0018 сек.
Вопрос: Почему функция не работает, может кто-то может исправить в ней ошибку / недоработку или предложить альтернативный вариант?
Пока что я тупо удалил этот метабокс через:
remove_meta_box( 'postcustom', 'post', 'normal' );
Да, функцию нашел тут:
http://wordpress.stackexchange.com/questions/187612/admin-very-slow-edit-page-caused-by-core-meta-query
Там автор написал:
to:
Но я хз как там они в wordpress работают и тестируют, их обновление sql в версии 4.3 картины не изменило (у меня последний wordpress если что)