You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Refactor — Post content rendering pipeline extracted to ContentProcessor class (C4, issue #3)
includes/classes/content/class-content-processor.php (new): post-content render pipeline (recursion guard, memory check, do_blocks dispatch, inline-CSS extraction + footer queue, fallback path) now lives as \BWS\DynamicTags\Content\ContentProcessor. Procedural API in includes/helpers/content-helpers.php preserved as thin wrappers — no caller-visible signature changes.
New generic entry: bws_render_block_content( $raw, $cache_key, $args ) / ContentProcessor::render(). Recursion stack now keys on a caller-supplied string ('post:'.$post_id for post-content, 'option:'.$key reserved for v1.9.0 src:site wp_options rendering) rather than an integer post ID. Required to support rendering block markup that doesn't live in a wp_posts row.
$GLOBALS['bws_content_processing_stack'] removed. Stack state is now sole property of ContentProcessor (static array). bws_content_debug_end() reads depth via ContentProcessor::stack_depth().
Added — Content pipeline filters
bws_content_memory_threshold (float, default 0.80): memory-usage fraction below which the primary render path runs. Filter to 0.0 to force the fallback path; raise toward 1.0 to allow primary rendering closer to OOM. Replaces the previous hardcoded 80% threshold.
bws_content_max_recursion_depth (int, default 3): maximum content stack depth before further pushes are blocked. Replaces the previous hardcoded depth-3 cap.
Refactor — includes/helpers/content-helpers.php split into single-concern files
docs/post-content-processing-reference.md: rewritten primary/fallback pipeline + recursion sections to reflect ContentProcessor. New filters documented; public API table now distinguishes class-level methods from procedural wrappers and notes bws_render_block_content as the generic entry. Cache key contract documented ('post:'.$id, 'option:'.$key, collisions defeat the guard).
docs/plugin-integration.md: helper section split into Field / Preview / Link / Content / Registration subsections matching the new file layout. Added Filters table.