Optimize Transient cache purge

Hopefully, this will work better with external object caches.
This commit is contained in:
Tetrakern 2024-10-12 21:29:00 +02:00
parent d1aa57453b
commit e019391e72
5 changed files with 33 additions and 17 deletions

View File

@ -279,7 +279,7 @@ Fictioneer customizes WordPress by using as many standard action and filter hook
| `customize_register` | `fictioneer_add_customizers` (20)
| `customize_save_after` | `fictioneer_watch_for_customizer_updates` (10)
| `delete_comment` | `fictioneer_delete_cached_story_card_by_comment` (10), `fictioneer_decrement_story_comment_count` (10)
| `delete_post` | `fictioneer_refresh_post_caches` (20), `fictioneer_track_chapter_and_story_updates` (10), `fictioneer_update_modified_date_on_story_for_chapter` (10), `fictioneer_purge_transients` (10)
| `delete_post` | `fictioneer_refresh_post_caches` (20), `fictioneer_track_chapter_and_story_updates` (10), `fictioneer_update_modified_date_on_story_for_chapter` (10), `fictioneer_purge_transients_after_update` (10)
| `do_feed_rss2` | `fictioneer_main_rss_template` (10)
| `do_meta_boxes` | `fictioneer_remove_custom_fields_meta_boxes` (1)
| `edit_comment` | `fictioneer_comment_edit` (20), `fictioneer_edit_comment` (10)
@ -298,15 +298,15 @@ Fictioneer customizes WordPress by using as many standard action and filter hook
| `publish_to_draft` | `fictioneer_chapter_to_draft` (10)
| `rest_api_init` | `fictioneer_register_endpoint_get_story_comments` (10)
| `restrict_manage_posts` | `fictioneer_add_chapter_story_filter_dropdown` (10)
| `save_post` | `fictioneer_refresh_chapters_schema` (20), `fictioneer_refresh_chapter_schema` (20), `fictioneer_refresh_collections_schema` (20), `fictioneer_refresh_post_caches` (20), `fictioneer_refresh_post_schema` (20), `fictioneer_refresh_recommendations_schema` (20), `fictioneer_refresh_recommendation_schema` (20), `fictioneer_refresh_stories_schema` (20), `fictioneer_refresh_story_schema` (20), `fictioneer_save_seo_metabox` (10), `fictioneer_save_word_count` (10), `fictioneer_track_chapter_and_story_updates` (10), `fictioneer_update_modified_date_on_story_for_chapter` (10), `fictioneer_update_shortcode_relationships` (10), `fictioneer_purge_transients` (10), `fictioneer_save_story_metaboxes` (10), `fictioneer_save_chapter_metaboxes` (10), `fictioneer_save_extra_metabox` (10), `fictioneer_save_support_links_metabox` (10), `fictioneer_save_collection_metaboxes` (10), `fictioneer_save_recommendation_metaboxes` (10), `fictioneer_save_post_metaboxes` (10), `fictioneer_delete_cached_story_card_after_update` (10), `fictioneer_rebuild_story_data_collection` (999), `fictioneer_post_chapter_to_discord` (99), `fictioneer_bulk_edit_save_patreon` (10), `fictioneer_bulk_edit_save_chapter_fields` (10)
| `save_post` | `fictioneer_refresh_chapters_schema` (20), `fictioneer_refresh_chapter_schema` (20), `fictioneer_refresh_collections_schema` (20), `fictioneer_refresh_post_caches` (20), `fictioneer_refresh_post_schema` (20), `fictioneer_refresh_recommendations_schema` (20), `fictioneer_refresh_recommendation_schema` (20), `fictioneer_refresh_stories_schema` (20), `fictioneer_refresh_story_schema` (20), `fictioneer_save_seo_metabox` (10), `fictioneer_save_word_count` (10), `fictioneer_track_chapter_and_story_updates` (10), `fictioneer_update_modified_date_on_story_for_chapter` (10), `fictioneer_update_shortcode_relationships` (10), `fictioneer_purge_transients_after_update` (10), `fictioneer_save_story_metaboxes` (10), `fictioneer_save_chapter_metaboxes` (10), `fictioneer_save_extra_metabox` (10), `fictioneer_save_support_links_metabox` (10), `fictioneer_save_collection_metaboxes` (10), `fictioneer_save_recommendation_metaboxes` (10), `fictioneer_save_post_metaboxes` (10), `fictioneer_delete_cached_story_card_after_update` (10), `fictioneer_rebuild_story_data_collection` (999), `fictioneer_post_chapter_to_discord` (99), `fictioneer_bulk_edit_save_patreon` (10), `fictioneer_bulk_edit_save_chapter_fields` (10)
| `send_headers` | `fictioneer_block_pages_from_indexing` (10)
| `show_user_profile` | `fictioneer_custom_profile_fields` (20)
| `shutdown` | `fictioneer_save_story_card_cache` (10), `fictioneer_save_query_result_cache_registry` (10)
| `switch_theme` | `fictioneer_theme_deactivation` (10)
| `template_redirect` | `fictioneer_generate_epub` (10), `fictioneer_oauth2_process` (10), `fictioneer_logout` (10), `fictioneer_disable_attachment_pages` (10), `fictioneer_gate_unpublished_content` (10), `fictioneer_serve_sitemap` (10), `fictioneer_redirect_story` (10)
| `transition_post_status` | `fictioneer_log_story_chapter_status_changes` (10), `fictioneer_chapter_future_to_publish` (10), `fictioneer_post_story_to_discord` (99)
| `trashed_post` | `fictioneer_refresh_post_caches` (20), `fictioneer_track_chapter_and_story_updates` (10), `fictioneer_update_modified_date_on_story_for_chapter` (10), `fictioneer_purge_transients` (10), `fictioneer_remove_chapter_from_story` (10)
| `untrash_post` | `fictioneer_refresh_post_caches` (20), `fictioneer_track_chapter_and_story_updates` (10), `fictioneer_update_modified_date_on_story_for_chapter` (10), `fictioneer_purge_transients` (10)
| `trashed_post` | `fictioneer_refresh_post_caches` (20), `fictioneer_track_chapter_and_story_updates` (10), `fictioneer_update_modified_date_on_story_for_chapter` (10), `fictioneer_purge_transients_after_update` (10), `fictioneer_remove_chapter_from_story` (10)
| `untrash_post` | `fictioneer_refresh_post_caches` (20), `fictioneer_track_chapter_and_story_updates` (10), `fictioneer_update_modified_date_on_story_for_chapter` (10), `fictioneer_purge_transients_after_update` (10)
| `update_option_*` | `fictioneer_update_option_disable_extended_chapter_list_meta_queries` (10), `fictioneer_update_option_disable_extended_story_list_meta_queries` (10)
| `wp_ajax_*` | `fictioneer_ajax_clear_my_checkmarks` (10), `fictioneer_ajax_clear_my_comments` (10), `fictioneer_ajax_clear_my_comment_subscriptions` (10), `fictioneer_ajax_clear_my_follows` (10), `fictioneer_ajax_clear_my_reminders` (10), `fictioneer_ajax_delete_epub` (10), `fictioneer_ajax_delete_my_account` (10), `fictioneer_ajax_delete_my_comment` (10), `fictioneer_ajax_edit_comment` (10), `fictioneer_ajax_get_avatar` (10), `fictioneer_ajax_get_comment_form` (10), `fictioneer_ajax_get_comment_section` (10), `fictioneer_ajax_get_finished_checkmarks_list` (10), `fictioneer_ajax_get_follows_list` (10), `fictioneer_ajax_get_follows_notifications` (10), `fictioneer_ajax_get_reminders_list` (10), `fictioneer_ajax_mark_follows_read` (10), `fictioneer_ajax_moderate_comment` (10), `fictioneer_ajax_report_comment` (10), `fictioneer_ajax_save_bookmarks` (10), `fictioneer_ajax_set_checkmark` (10), `fictioneer_ajax_submit_comment` (10), `fictioneer_ajax_toggle_follow` (10), `fictioneer_ajax_toggle_reminder` (10), `fictioneer_ajax_unset_my_oauth` (10), `fictioneer_ajax_get_user_data` (10), `fictioneer_ajax_get_auth` (10), `fictioneer_ajax_purge_schema` (10), `fictioneer_ajax_purge_all_schemas` (10), `fictioneer_ajax_reset_theme_colors` (10), `fictioneer_ajax_search_posts_to_unlock` (10), `fictioneer_ajax_get_chapter_group_options` (10)
| `wp_ajax_nopriv_*` | `fictioneer_ajax_get_comment_form` (10), `fictioneer_ajax_get_comment_section` (10), `fictioneer_ajax_submit_comment` (10), `fictioneer_ajax_get_auth` (10)

View File

@ -14,8 +14,7 @@
function fictioneer_watch_for_customizer_updates() {
// Transient caches
fictioneer_delete_transients_like( 'fictioneer_' );
fictioneer_purge_nav_menu_transients();
fictioneer_delete_layout_transients();
// Rebuild customize stylesheet
fictioneer_build_customize_css();

View File

@ -795,6 +795,20 @@ if ( FICTIONEER_ENABLE_STORY_DATA_META_CACHE ) {
// PURGE CACHE TRANSIENTS
// =============================================================================
/**
* Purge layout-related Transients
*
* @since 5.25.0
*/
function fictioneer_delete_layout_transients() {
fictioneer_purge_nav_menu_transients();
fictioneer_purge_story_card_cache();
fictioneer_delete_transients_like( 'fictioneer_shortcode' );
fictioneer_delete_transients_like( 'fictioneer_taxonomy_submenu_' );
delete_transient( 'fictioneer_dynamic_scripts_version' );
}
/**
* Purge Transients used for caching when posts are updated
*
@ -804,7 +818,7 @@ if ( FICTIONEER_ENABLE_STORY_DATA_META_CACHE ) {
* @param int $post_id Updated post ID.
*/
function fictioneer_purge_transients( $post_id ) {
function fictioneer_purge_transients_after_update( $post_id ) {
// Prevent multi-fire
if ( fictioneer_multi_save_guard( $post_id ) ) {
return;
@ -818,7 +832,7 @@ function fictioneer_purge_transients( $post_id ) {
}
/**
* Add or remove actions for `fictioneer_purge_transients`
* Add or remove actions for `fictioneer_purge_transients_after_update`
*
* @since 5.5.2
*
@ -830,11 +844,11 @@ function fictioneer_toggle_transient_purge_hooks( $add = true ) {
if ( $add ) {
foreach ( $hooks as $hook ) {
add_action( $hook, 'fictioneer_purge_transients' );
add_action( $hook, 'fictioneer_purge_transients_after_update' );
}
} else {
foreach ( $hooks as $hook ) {
remove_action( $hook, 'fictioneer_purge_transients' );
remove_action( $hook, 'fictioneer_purge_transients_after_update' );
}
}
}
@ -842,7 +856,7 @@ function fictioneer_toggle_transient_purge_hooks( $add = true ) {
fictioneer_toggle_transient_purge_hooks();
/**
* Purge nav menu Transients on menu updates
* Purge nav menu Transients
*
* @since 5.6.0
*/
@ -850,6 +864,8 @@ fictioneer_toggle_transient_purge_hooks();
function fictioneer_purge_nav_menu_transients() {
delete_transient( 'fictioneer_main_nav_menu_html' );
delete_transient( 'fictioneer_footer_menu_html' );
delete_transient( 'fictioneer_mobile_nav_menu_html' );
fictioneer_delete_transients_like( 'fictioneer_taxonomy_submenu_' );
}
add_action( 'wp_update_nav_menu', 'fictioneer_purge_nav_menu_transients' );

View File

@ -237,8 +237,8 @@ add_action( 'after_setup_theme', 'fictioneer_theme_setup' );
*/
function fictioneer_purge_caches_after_update() {
// Transients
fictioneer_delete_transients_like( 'fictioneer_' );
// Transients (fast, assuming this also causes a purge of external object caches)
fictioneer_delete_transients_like( 'fictioneer_', true );
// Cache busting string
fictioneer_regenerate_cache_bust();

View File

@ -459,10 +459,6 @@ function fictioneer_purge_theme_caches() {
$wpdb->query( $wpdb->prepare( $sql, 'fictioneer_story_data_collection', 'fictioneer_story_chapter_index_html' ) );
// Transients
fictioneer_purge_nav_menu_transients();
fictioneer_delete_transients_like( 'fictioneer_' );
// Delete cached files
$files = glob( trailingslashit( fictioneer_get_theme_cache_dir( 'purge_theme_caches' ) ) . '*' );
@ -483,6 +479,11 @@ function fictioneer_purge_theme_caches() {
// Query result cache registry
delete_option( 'fictioneer_query_cache_registry' );
// Transients
fictioneer_delete_layout_transients();
fictioneer_delete_transients_like( 'fictioneer_shortcode' );
fictioneer_delete_transients_like( 'fictioneer_', true ); // Fast, but not safe for external object caches
// Log
fictioneer_log( __( 'Purged theme caches.', 'fictioneer' ) );
}