Redu sau previne apelarea funcției update_meta_cache
Tema mea apelează funcția update_meta_cache() de 58 de ori pe pagină! Această funcție pare să execute următoarea interogare bazată pe postarea în cauză:
SELECT post_id, meta_key, meta_value
-> FROM wp_postmeta
-> WHERE post_id IN (81649)
-> ORDER BY meta_id ASC
-> ;
Majoritatea meta_key-urilor (și valorile corespunzătoare) returnate nu sunt necesare pentru pagina în cauză (de exemplu, yoast_wpseo_title, _edit_last, _edit_lock nu sunt necesare pentru bucla paginii de start).
Există vreo metodă de a reduce sau preveni apelarea funcției update_meta_cache? Poate există o modalitate de a include într-o funcție pe hook-ul pre_get_posts?

Oricând folosești funcția get_post_meta()
, interogarea de mai sus va fi executată pentru a obține toate metadatele postării și a le stoca în cache. Cu cât interoghezi mai multe postări, cu atât mai multe interogări vor fi efectuate.
Pentru a reduce numărul de interogări, ar trebui să pre-cachezi toate valorile meta ale tuturor postărilor din interogare înainte de a apela get_post_meta
.
Acesta este codul exemplu preluat dintr-un tutorial:
add_filter( 'posts_results', 'cache_meta_data', 9999, 2 );
function cache_meta_data( $posts, $object ) {
$posts_to_cache = array();
// de obicei are sens doar când avem mai multe postări
if ( empty( $posts ) || is_wp_error( $posts ) || is_single() || is_page() || count( $posts ) < 3 )
return $posts;
foreach( $posts as $post ) {
if ( isset( $post->ID ) && isset( $post->post_type ) ) {
$posts_to_cache[$post->ID] = 1;
}
}
if ( empty( $posts_to_cache ) )
return $posts;
update_meta_cache( 'post', array_keys( $posts_to_cache ) );
unset( $posts_to_cache );
return $posts;
}

Tocmai am dat peste această problemă, pentru că văd o mulțime de cereri update_meta_cache()
făcute. Cu această modificare în fișierul functions.php al temei mele, încă văd multe astfel de interogări? SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (8987) ORDER BY meta_id ASC
... fac ceva greșit?

Niciun efect, este o idee proastă să folosești cod aleatoriu din 2011 pe ultima versiune de WordPress, s-au schimbat atât de multe lucruri.

Am căutat pur și simplu "update_meta_cache" în "întregul folder WordPress" și l-am oprit.. Acum site-ul rulează de parcă aș folosi offline.. super rapid.

NU CACHEA TOATE POSTĂRILE (SITEULUI) DEODATĂ - autorul se referă aici la toate postările preluate pentru o anumită pagină, nu încercați să pre-cache-uiți sute, mii, milioane etc. de postări, acest lucru ar putea distruge site-ul vostru. Dacă aveți nevoie de caching extins, folosiți o soluție sau un plugin de caching pe pagină. (textul îngroșat pare doar înșelător pentru noii veniți)

Pentru un WP_Query
, caching-ul poate fi dezactivat prin setarea anumitor parametri de caching la false
.
În mod similar pentru WP_Term_Query
, acesta poate fi dezactivat prin includerea update_term_meta_cache => false
în argumentele interogării.
În plus, filtrul update_{$meta_type}_metadata_cache poate fi folosit pentru a dezactiva caching-ul de metadate pentru toate interogările pe tipul de obiect. (ex. update_post_metadata_cache
, update_term_metadata_cache
, etc)
