diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 563def2e..147b8ff3 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -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) diff --git a/includes/functions/_customizer-settings.php b/includes/functions/_customizer-settings.php index 653dcb5d..4e8e0246 100644 --- a/includes/functions/_customizer-settings.php +++ b/includes/functions/_customizer-settings.php @@ -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(); diff --git a/includes/functions/_service-caching.php b/includes/functions/_service-caching.php index 32704e84..9367789d 100644 --- a/includes/functions/_service-caching.php +++ b/includes/functions/_service-caching.php @@ -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' ); diff --git a/includes/functions/_setup-theme.php b/includes/functions/_setup-theme.php index 6ebb1488..5aafeb9b 100644 --- a/includes/functions/_setup-theme.php +++ b/includes/functions/_setup-theme.php @@ -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(); diff --git a/includes/functions/settings/_settings_actions.php b/includes/functions/settings/_settings_actions.php index 2825fa86..4863dfb9 100644 --- a/includes/functions/settings/_settings_actions.php +++ b/includes/functions/settings/_settings_actions.php @@ -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' ) ); }