Stratégies pour maximiser l’efficacité du cache avec Field Forge.
Quand utiliser la synchronisation PostMeta
Si des plugins tiers nécessitent des valeurs de champ dans wp_postmeta :
php
add_action( 'fieldforge/value_updated', function( $post_id, $field_name ) {
$sync_fields = [ 'price', 'sale_price', 'sku', 'stock_quantity' ];
if ( in_array( $field_name, $sync_fields, true ) ) {
$value = FIELDFORGE_Field_Values::instance()->get_value( $field_name, $post_id );
update_post_meta( $post_id, '_' . $field_name, $value );
}
}, 10, 2 );Invalidation du cache
Les caches sont automatiquement invalidés lorsque :
- Une valeur de champ est mise à jour (action
fieldforge/value_updated) - Toutes les valeurs d’une publication sont supprimées (action
fieldforge/values_deleted) - Un groupe de champs est sauvegardé ou supprimé
Éviter les requêtes N+1
php
// Bad: N+1 queries
$ids = [1, 2, 3, 4, 5];
foreach ( $ids as $id ) {
$price = get_field( 'price', $id ); // 1 query each = 5 queries
}
// Good: Preload then access
fieldforge_preload( $ids );
foreach ( $ids as $id ) {
$price = get_field( 'price', $id ); // 0 queries (all from cache)
}Mise en cache transitoire pour des opérations coûteuses
php
function get_featured_products_data() {
$cache_key = 'featured_products_data';
$data = get_transient( $cache_key );
if ( false === $data ) {
$query = new WP_Query( [
'post_type' => 'product',
'posts_per_page' => 6,
'meta_key' => '_is_featured',
'meta_value' => '1',
] );
fieldforge_preload( wp_list_pluck( $query->posts, 'ID' ) );
$data = [];
while ( $query->have_posts() ) : $query->the_post();
$data[] = [
'title' => get_the_title(),
'price' => get_field( 'price' ),
'image' => get_field( 'thumbnail' ),
'url' => get_permalink(),
];
endwhile;
wp_reset_postdata();
set_transient( $cache_key, $data, HOUR_IN_SECONDS );
}
return $data;
}
// Invalidate when product fields change
add_action( 'fieldforge/value_updated', function( $post_id ) {
if ( get_post_type( $post_id ) === 'product' ) {
delete_transient( 'featured_products_data' );
}
}, 10, 1 );—