save_post Hook in WPFTS

The save_post hook is a standard WordPress hook that triggers every time a post or page is saved or updated. WPFTS utilizes this hook to maintain the currency of its search index by re-indexing the content of the modified or newly created post.

What WPFTS does when save_post is called:

  1. Post Synchronization: WPFTS first calls the MakePostsSync(true) method to ensure that the internal list of posts requiring indexing is up-to-date. This guarantees that the post that has just been saved is included in the list for indexing.

  2. Setting Re-indexing Priority: The plugin executes the SQL query update wpftsi_index set force_rebuild = 2 where tid = ... to set a high priority for re-indexing the post. This ensures that this post is processed by the indexer first.

  3. Resetting the Status Timer: set_option('status_next_ts', 0) is called to reset the indexing status timer. This leads to the indexing status being recalculated on the next status request, and the user will see up-to-date information about the indexing process.

  4. Interrupting the Current Indexing Iteration: set_option('is_break_loop', 1) sets a flag to interrupt the current indexing cycle. This allows the indexer to start a new iteration and process the high-priority post.

  5. Starting the Indexer: WPFTS calls the CallIndexerStartNoBlocking() method to start the indexer in the background.

Important Functions Involved in save_post Handling:

  • WPFTS_Core::MakePostsSync(true)

  • WPFTS_Core::set_option()

  • WPFTS_Core::CallIndexerStartNoBlocking()

  • wpfts_post_reindex() (called in save_post action)

How to Use This in Addon Development:

Understanding how WPFTS uses the save_post hook allows addon developers to effectively integrate their data into the search index. For example, if your addon adds custom meta fields, you can use the wpfts_index_post filter to add the values of these fields to $chunks when indexing the post. Since WPFTS automatically re-indexes posts upon saving, your addon’s data will also be updated in the index.

Additional Notes:

  • WPFTS uses a non-blocking indexer start to avoid slowing down the post saving process.

  • Re-indexing happens in the background, so the user can continue working with the site without delays.