31. Найкращі практики кешування | Field Forge - Кастомні поля, створені для швидкості
Завантажити Увійти

31. Найкращі практики кешування

Стратегії для максимізації ефективності кешу з Field Forge.

Коли використовувати синхронізацію PostMeta

Якщо плагіни сторонніх розробників вимагають значення полів у 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 );

Інвалідизація кешу

Кеші автоматично інвалідизуються, коли:

  • Значення поля оновлено (дія fieldforge/value_updated)
  • Всі значення для поста видалено (дія fieldforge/values_deleted)
  • Група полів збережена або видалена

Уникнення запитів 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)
}

Тимчасове кешування для дорогих операцій

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 );

Асистент ШІ Forge Онлайн

Привіт! Я асистент ШІ Field Forge. Запитайте мене про будь-що щодо плагіна — налаштування, можливості, усунення несправностей чи розробку.

Щойно
Працює на Forge AI · Переглянути документацію