Skip to content

Hooks

RowSprout 3.1 and RowSprout Pro 3.1 offer 46 hooks: 37 filters and 9 actions. This page is generated from the plugin source on every build, so it lists every hook that exists and nothing else.

  • All hook names start with rowsprout_. Hooks marked RowSprout Pro only fire while RowSprout Pro is active.
  • Hooks marked Internal connect RowSprout to RowSprout Pro. They are listed for completeness; their arguments may change without notice, so prefer the other hooks in your own code.
  • Filters that pass null by default are short-circuits: return a value to take over, or null to keep the default behaviour.
  • Source lines link to the free plugin on GitHub; RowSprout Pro’s source is not public.

Action

Adds Elementor controls to the save action section of a template’s document settings, the Elementor counterpart of rowsprout_render_template_save_action_fields. Map their values into the save with rowsprout_elementor_save_input.

do_action( 'rowsprout_elementor_save_action_controls', $document, $postId )
Parameter Type Description
$document \Elementor\Core\Base\Document The Elementor document; call $document->add_control() on it.
$postId int The template (rowsprout_template post ID).

Source: src/ThirdParty/Elementor/TemplateSaveActionControl.php:119

Filter

Turns Elementor document settings into save input when a template is saved from Elementor. Use the same keys your classic-screen fields post, so one save handler serves both editors.

apply_filters( 'rowsprout_elementor_save_input', $input, $settings )
Parameter Type Description
$input array<string, string> The save input; contains at least rowsprout_page_save_action.
$settings array The Elementor document settings.

Returns: The save input.

Source: src/ThirdParty/Elementor/TemplateSaveActionControl.php:203

Filter

Handles a custom save action that has no handler_callback (or whose callback returned false).

apply_filters( 'rowsprout_handle_template_save_action', $handled, $postId, $saveAction, $actionConfig )
Parameter Type Description
$handled bool Whether the action was handled; false by default.
$postId int The template (rowsprout_template post ID).
$saveAction string The selected action key.
$actionConfig array Its config from rowsprout_template_save_actions.

Returns: true when you handled the save.

Source: src/Core/SavePost.php:470

rowsprout_render_template_save_action_fields

Section titled “rowsprout_render_template_save_action_fields”

Action

Prints extra fields under one save action in the classic screen’s publish box (each action has its own container, shown while that action is selected). Fields posted from here arrive in the normal save request.

do_action( 'rowsprout_render_template_save_action_fields', $postId, $actionKey, $selectedSaveAction, $actionConfig )
Parameter Type Description
$postId int The template (rowsprout_template post ID).
$actionKey string The action whose container is being printed.
$selectedSaveAction string The action currently selected.
$actionConfig array That action’s config from rowsprout_template_save_actions.

Source: src/Admin/Metaboxes/PublishBoxRenderer.php:36

Action

Renders the Status column on the Templates screen instead of the built-in dot and “x of y up to date” label. Only fires when something is hooked to it; RowSprout Pro uses it for its live status bar.

do_action( 'rowsprout_render_template_status_cell', $postId )
Parameter Type Description
$postId int The template (rowsprout_template post ID).

Source: src/Admin/TemplateStatusColumn.php:57

Action

Prints extra settings on RowSprout → Settings, after the page URL base section.

do_action( 'rowsprout_settings_page_after_permalink' )

Source: src/Admin/Menu.php:181

Filter

Skips RowSprout’s template save handler for this save_post run. Meant for an integration whose own save lifecycle fires save_post_rowsprout_template part-way and calls the handler itself afterwards with fuller context (the block editor and Elementor integrations use it), so the save does not run twice.

apply_filters( 'rowsprout_skip_handle_save', $skip, $postId )
Parameter Type Description
$skip bool false by default.
$postId int The template (rowsprout_template post ID).

Returns: true to skip.

Source: src/Core/SavePost.php:308

Filter

The save actions offered in the template’s Save action selector: update_pages (“Create & update pages”) and save_template (“Save template only”). RowSprout Pro adds schedule_pages. Runs wherever the list is needed: rendering the selector, handling the save and deciding whether a save generates pages.

apply_filters( 'rowsprout_template_save_actions', $actions )
Parameter Type Description
$actions array Action key => config. Keys used: label, description, disable_schedule (true = this action generates nothing; the affected pages are marked outdated instead), handler_callback (callable ( int $postId, string $action, array $config ): bool, return true when you handled the save) and render_fields_callback (prints extra fields under the selector).

Returns: The array of actions.

Source: src/Admin/Metaboxes/PublishBoxRenderer.php:65, src/Core/SavePost.php:490, src/Core/Template/Lifecycle/TemplateSaveActionState.php:61

Filter

Adds tabs after the built-in General, Properties and Groups tabs of the template box. The same markup feeds the classic edit screen and the “RowSprout template” tab in Elementor, so a tab added here appears in both.

apply_filters( 'rowsprout_template_tabs', $tabs, $post )
Parameter Type Description
$tabs array Extra tabs. Each entry: id (unique HTML id, e.g. my-tab), label, render (callable receiving the WP_Post) and optionally hidden (start with the tab button hidden; your own script can reveal it).
$post WP_Post The template being edited.

Returns: The array of tabs.

Source: src/Admin/Metaboxes/TemplateTabsRenderer.php:35

Example

add_filter( 'rowsprout_template_tabs', function ( array $tabs, WP_Post $post ): array {
$tabs[] = [
'id' => 'my-notes-tab',
'label' => __( 'Notes', 'my-plugin' ),
'render' => function ( WP_Post $post ): void {
echo '<p>' . esc_html( get_post_meta( $post->ID, '_my_notes', true ) ) . '</p>';
},
];
return $tabs;
}, 10, 2 );

Filter

Adjusts the definitions (label, description, default code, UI kind, options, required, …) of the registered property types after they are collected, keyed by type.

apply_filters( 'rowsprout_field_type_definitions', $definitions )
Parameter Type Description
$definitions array<string, array> Type => definition, as returned by each type’s getDefinition().

Returns: The definitions.

Source: src/Core/Template/FieldTypeRegistry.php:19

Filter

Registers property types. Each entry is an object implementing RowSprout\Core\Template\FieldTypes\FieldTypeContract; extending BaseFieldType gives sensible defaults. Create the object inside the filter: your plugin may load before RowSprout, and the base class only exists once RowSprout is loaded. RowSprout Pro adds its extra types (Checkbox, Date, Select, …) here. A complete example is in the how-to guides.

apply_filters( 'rowsprout_field_types', $types )
Parameter Type Description
$types FieldTypeContract[] The registered types.

Returns: The array of types.

Source: src/Core/Template/FieldTypes/FieldTypeManager.php:35

Example

use RowSprout\Core\Template\FieldTypes\BaseFieldType;
add_filter( 'rowsprout_field_types', function ( array $types ): array {
$types[] = new class() extends BaseFieldType {
public function getType(): string { return 'postcode'; }
public function getUiKind(): string { return 'text'; }
protected function label(): string { return __( 'Postcode', 'my-plugin' ); }
protected function description(): string { return __( 'A postal code.', 'my-plugin' ); }
protected function defaultCode(): string { return 'postcode'; }
public function sanitize( string $value, array $options ): string {
return strtoupper( preg_replace( '/\s+/', ' ', trim( $value ) ) );
}
};
return $types;
} );

rowsprout_group_placeholder_alias_code_ids

Section titled “rowsprout_group_placeholder_alias_code_ids”

Filter Internal

Other template IDs whose placeholder tokens should resolve with this group’s data. RowSprout Pro’s WPML integration adds every translation’s template ID, because WPML copies a template’s title and URL pattern into the translation with the original template’s tokens in it.

apply_filters( 'rowsprout_group_placeholder_alias_code_ids', $aliasCodeIds, $rowsproutPageId, $templatePost )
Parameter Type Description
$aliasCodeIds int[] Empty by default.
$rowsproutPageId int The template being built from.
$templatePost WP_Post The same template as a post object.

Returns: The extra template IDs.

Source: src/Core/Page/PageBuildContextResolver.php:31

Filter

Extra names a property can be referred to by in placeholder tokens. By default a property answers to its key and its code; title, URL slug and textarea types get a few fixed aliases.

apply_filters( 'rowsprout_placeholder_field_aliases', $aliases, $fieldKey, $fieldType, $code )
Parameter Type Description
$aliases string[] The aliases so far.
$fieldKey string The property key.
$fieldType string The property type.
$code string The property code.

Returns: The aliases.

Source: src/Core/Page/GroupPlaceholderTokenResolver.php:154

Filter

Block Bindings: the value for a date attribute (the Post Date block) bound to a property. None of the free types is a date; a plugin that adds one returns the value here.

apply_filters( 'rowsprout_property_binding_date', $date, $value, $type )
Parameter Type Description
$date string|null null keeps the block’s own value.
$value string The property value.
$type string The property type.

Returns: A date string, or null.

Source: src/Core/BlockBindings/PropertyBindingSource.php:110

Filter

Block Bindings: the HTML for a text attribute (Paragraph, Heading, List item, Button text) bound to a property of a type a plugin registers. Textarea values keep their line breaks before this filter runs.

apply_filters( 'rowsprout_property_binding_html', $html, $value, $type )
Parameter Type Description
$html string|null null falls back to the escaped plain value. Escape the HTML you return yourself.
$value string The property value.
$type string The property type.

Returns: HTML, or null.

Source: src/Core/BlockBindings/PropertyBindingSource.php:157

Filter

Block Bindings: the URL for a link or image attribute bound to a property of a type a plugin registers (a phone or file type, for example). Email properties become mailto: links before this filter runs.

apply_filters( 'rowsprout_property_binding_url', $url, $value, $type )
Parameter Type Description
$url string|null null leaves it to the default handling; '' keeps the block’s own value.
$value string The property value.
$type string The property type.

Returns: A URL, '' or null.

Source: src/Core/BlockBindings/PropertyBindingSource.php:136

Filter Internal

How a value must be encoded inside a shortcode attribute, which depends on the page builder that wrote the shortcode. Without an encoder, tokens inside shortcode attributes get the plain replacement. RowSprout’s WPBakery integration returns one that writes " as `` and [/] as `{`/`}`. The encoder also receives the URL-encoded form of each token (%40code_…%40), used in link fields, and must return the value encoded the same way.

apply_filters( 'rowsprout_shortcode_attribute_encoder', $encoder )
Parameter Type Description
$encoder callable|null null by default.

Returns: A callable, or null.

Source: src/Core/Page/MarkupTokenReplacer.php:134

rowsprout_child_template_changed_parent_groups

Section titled “rowsprout_child_template_changed_parent_groups”

Filter Internal

After a parent template is saved: which of its groups affect a child template. null (the default) marks every group of the child.

apply_filters( 'rowsprout_child_template_changed_parent_groups', $parentGuids, $childTemplateId, $parentTemplateId, $oldConfig, $newConfig )
Parameter Type Description
$parentGuids string[]|null null, or the parent group IDs that affect the child.
$childTemplateId int The child template.
$parentTemplateId int The parent template that was saved.
$oldConfig array The parent’s config before the save.
$newConfig array The parent’s config after the save.

Returns: null or the parent group IDs.

Source: src/Core/Template/Lifecycle/TemplateSyncMarker.php:236

Filter

Seconds between runs of the background queue. Only read when the recurring action is scheduled, so a change takes effect after the existing rowsprout_process_groups_queue action is unscheduled.

apply_filters( 'rowsprout_groups_queue_interval', $interval )
Parameter Type Description
$interval int MINUTE_IN_SECONDS by default.

Returns: The interval in seconds.

Source: src/Core/Scheduler/QueueManager.php:16

Filter

How many pages one run of the background queue starts. The queue runs every minute through Action Scheduler and waits until the previous batch is finished. RowSprout Pro’s Throttling page sets this from its Batch size setting.

apply_filters( 'rowsprout_groups_queue_limit', $limit )
Parameter Type Description
$limit int 40 by default.

Returns: The batch size.

Source: src/Core/Scheduler/QueueProcessor.php:26

Example

// Smaller batches on a shared host.
add_filter( 'rowsprout_groups_queue_limit', fn () => 10 );

Action

Fires after groups of a template were queued: by a save with “Create & update pages” (status pending) or by RowSprout Pro’s planning (status scheduled).

do_action( 'rowsprout_groups_queued', $postId, $status )
Parameter Type Description
$postId int The template (rowsprout_template post ID).
$status string pending or scheduled.

Source: src/Core/SavePost.php:420, RowSprout Pro src/Support/GroupPlanningService.php:167

Filter

Whether the queue may process pages right now. Due planned groups are still promoted to pending; they wait until this returns true. RowSprout Pro’s Processing Time Window setting uses it.

apply_filters( 'rowsprout_is_within_processing_window', $within )
Parameter Type Description
$within bool true by default.

Returns: false to pause processing for this run.

Source: src/Core/Scheduler/QueueProcessor.php:96

Example

// Only generate pages at night (site timezone).
add_filter( 'rowsprout_is_within_processing_window', function ( bool $within ): bool {
$hour = (int) wp_date( 'G' );
return $within && ( $hour >= 22 || $hour < 6 );
} );

Filter Internal

Which groups a template save affects. null (the default) means every group, so every page is regenerated. RowSprout Pro’s Smart Generate returns only the groups whose values changed plus the groups this save added.

apply_filters( 'rowsprout_template_changed_groups', $changes, $postId, $oldConfig, $newConfig )
Parameter Type Description
$changes array|null null, or [ 'changed' => string[], 'added' => string[] ] with group IDs.
$postId int The template (rowsprout_template post ID).
$oldConfig array The template config before this save.
$newConfig array The template config after this save.

Returns: null or the changes array.

Source: src/Core/Template/Lifecycle/TemplateSyncMarker.php:157

Filter

Template meta keys that are not copied onto generated pages. Every other meta key of the template is copied, with placeholder tokens replaced. A trailing * matches a prefix. The Elementor and Rank Math integrations add their own keys here.

apply_filters( 'rowsprout_excluded_meta_keys', $excludedKeys, $sourcePostId, $targetPostId, $group )
Parameter Type Description
$excludedKeys string[] Includes _edit_lock, _edit_last and _rowsprout_page_*.
$sourcePostId int The template.
$targetPostId int The generated page.
$group array The group being built.

Returns: The excluded keys.

Source: src/Core/Page/PageMetaReplicator.php:32

Example

add_filter( 'rowsprout_excluded_meta_keys', function ( array $keys ): array {
$keys[] = '_my_template_only_setting';
return $keys;
} );

Action

Fires after a generated page was inserted or updated, its meta copied from the template and its featured image set. The place to add your own meta or sync the page elsewhere.

do_action( 'rowsprout_page_after_upsert', $newPostId, $group, $rowsproutPageId )
Parameter Type Description
$newPostId int The generated page (rowsprout_page post ID).
$group array The group it was built from.
$rowsproutPageId int The template ID.

Source: src/Core/Page/PageBuilder.php:88

Example

add_action( 'rowsprout_page_after_upsert', function ( int $pageId, array $group, int $templateId ): void {
update_post_meta( $pageId, '_my_source_row', $group['id'] ?? '' );
}, 10, 3 );

Action

Fires just before a generated page is inserted or updated.

do_action( 'rowsprout_page_before_upsert', $defaults, $group, $rowsproutPageId )
Parameter Type Description
$defaults array The post data (after rowsprout_page_defaults_before_upsert).
$group array The group being built.
$rowsproutPageId int The template ID.

Source: src/Core/Page/PageBuilder.php:68

Filter

The post data a generated page is created or updated with (post_title, post_content, post_name, post_status, … copied from the template with this group’s values filled in). A generated page is always updated in place: the same post ID every time.

apply_filters( 'rowsprout_page_defaults_before_upsert', $defaults, $group, $rowsproutPageId )
Parameter Type Description
$defaults array Arguments for wp_insert_post() / wp_update_post().
$group array The group (row) being built.
$rowsproutPageId int The template ID.

Returns: The post data.

Source: src/Core/Page/PageBuilder.php:66

Filter

Meta keys deleted from a generated page every time it is rebuilt, right after the template’s meta was copied onto it. Use it for caches that were copied from the template but must be rebuilt for the page itself (the Elementor integration deletes _elementor_css and _elementor_element_cache here).

apply_filters( 'rowsprout_page_delete_post_meta_keys', $metaKeys, $postId )
Parameter Type Description
$metaKeys string[] Empty by default.
$postId int The generated page.

Returns: The keys to delete.

Source: src/Core/Helpers.php:194

Action Internal

Fires just before a generated page is deleted because its group was removed, so a multilingual integration can delete the page’s translations with it. Runs for each child page first, then for the page itself.

do_action( 'rowsprout_page_delete_wpml_translations', $postId, $postType )
Parameter Type Description
$postId int The page about to be deleted.
$postType string Always rowsprout_page.

Source: src/Core/Groups/GroupDeletionService.php:55, src/Core/Groups/GroupDeletionService.php:59

Filter

Meta key prefixes your integration owns whose keys can disappear from the template (Rank Math’s schema keys, for example). Before meta is copied, every key on the generated page with such a prefix that the template no longer has is deleted, so removed settings do not linger on the pages.

apply_filters( 'rowsprout_reconciled_meta_key_prefixes', $prefixes, $sourcePostId, $targetPostId, $group )
Parameter Type Description
$prefixes string[] Empty by default.
$sourcePostId int The template.
$targetPostId int The generated page.
$group array The group being built.

Returns: The prefixes.

Source: src/Core/Page/PageMetaReplicator.php:151

Filter Internal

For a child template: fills the group’s empty title, URL and thumbnail from the matching group of the parent template. RowSprout’s own child-template support hooks in here; the Elementor field resolver reuses it so the editor preview shows inherited values too.

apply_filters( 'rowsprout_resolve_child_template_context', $context, $id, $rowsproutPageId, $templatePost )
Parameter Type Description
$context array [ 'group' => array, 'parent_id' => int|null ].
$id string The group ID.
$rowsproutPageId int The child template ID.
$templatePost WP_Post The child template.

Returns: The context, with the group filled in.

Source: src/Core/Page/PageBuildContextResolver.php:40, src/ThirdParty/Elementor/PageFieldResolver.php:173

Filter

Capabilities of the generated page post type. By default generated pages are locked: editing and deleting published, private and other people’s pages maps to do_not_allow, so changes always go through the template. Unlocking under RowSprout → Settings removes those entries.

apply_filters( 'rowsprout_post_type_capabilities', $capabilities )
Parameter Type Description
$capabilities array<string, string> For the capabilities argument of register_post_type().

Returns: The capabilities.

Source: src/Core/PostTypes.php:49

Filter

The supports list of the generated page post type, rowsprout_page.

apply_filters( 'rowsprout_post_type_supports', $pageSupports )
Parameter Type Description
$pageSupports string[] Feature names for register_post_type().

Returns: The list.

Source: src/Core/PostTypes.php:44

Filter

The supports list of the template post type, rowsprout_template. Keep page-attributes: it provides the Parent field child templates rely on.

apply_filters( 'rowsprout_template_post_type_supports', $templateSupports )
Parameter Type Description
$templateSupports string[] title, editor, thumbnail, revisions, page-attributes.

Returns: The list.

Source: src/Core/PostTypes.php:45

Filter

When generated pages have no URL base, RowSprout looks up the requested path itself. This filter lets a multilingual integration strip a language prefix (en/ in /en/plumber-amsterdam/) from that path first; RowSprout Pro’s WPML integration does so.

apply_filters( 'rowsprout_url_candidate_path', $path )
Parameter Type Description
$path string The request path without leading or trailing slash.

Returns: The path to look up.

Source: src/Core/RemoveCptBase.php:145

Filter Internal

Short-circuits reading a child template’s extra per-group data (child_extra in the template config).

apply_filters( 'rowsprout_get_child_extra', $result, $postId, $single )
Parameter Type Description
$result array|null null by default.
$postId int The template (rowsprout_template post ID).
$single bool Passed through from the caller.

Returns: null, or the data.

Source: src/Core/Template/Lookup/TemplateDataReader.php:57

Filter Internal

Short-circuits reading one entry of a child template’s child_extra data.

apply_filters( 'rowsprout_get_child_extra_by_id', $result, $id, $rowsproutPageId )
Parameter Type Description
$result array|null null by default.
$id string The group ID.
$rowsproutPageId int The template ID.

Returns: null, or the entry.

Source: src/Core/Template/Lookup/TemplateDataReader.php:73

Filter Internal

Short-circuits which template IDs a template’s placeholder tokens use: its own ID and, for a child template, its parent’s.

apply_filters( 'rowsprout_get_code_ids', $result, $postId )
Parameter Type Description
$result array|null null, or [ 'code_id' => int, 'parent_code_id' => int|string ].
$postId int The template (rowsprout_template post ID).

Returns: null, or the IDs.

Source: src/Core/Template/Lookup/TemplateDataReader.php:93

Filter Internal

Short-circuits reading one group of a template.

apply_filters( 'rowsprout_get_group_by_id', $result, $id, $rowsproutPageId )
Parameter Type Description
$result array|null null by default.
$id string The group ID (unique within its template only).
$rowsproutPageId int The template ID.

Returns: null, or the group.

Source: src/Core/Template/Lookup/TemplateDataReader.php:35

Filter Internal

Short-circuits reading a template’s groups. Return anything other than null to replace the stored groups.

apply_filters( 'rowsprout_get_groups', $result, $postId, $single )
Parameter Type Description
$result array|null null by default.
$postId int The template (rowsprout_template post ID).
$single bool Passed through from the caller.

Returns: null, or the groups.

Source: src/Core/Template/Lookup/TemplateDataReader.php:19

Filter RowSprout Pro

Smart Generate: like rowsprout_global_change_meta_keys, but matches every meta key that starts with one of these prefixes.

apply_filters( 'rowsprout_global_change_meta_key_prefixes', $prefixes )
Parameter Type Description
$prefixes string[] Meta key prefixes.

Returns: The prefixes.

Source: RowSprout Pro src/SmartGenerate/TemplateMetaChangeTracker.php:99

Filter RowSprout Pro

Smart Generate: template meta keys whose change counts as a change to the whole template, so every page is regenerated, just like a change to the title or content. Empty by default.

apply_filters( 'rowsprout_global_change_meta_keys', $metaKeys )
Parameter Type Description
$metaKeys string[] Exact meta keys.

Returns: The keys.

Source: RowSprout Pro src/SmartGenerate/TemplateMetaChangeTracker.php:82

Example

add_filter( 'rowsprout_global_change_meta_keys', function ( array $keys ): array {
$keys[] = '_my_layout_setting';
return $keys;
} );

Action RowSprout Pro Internal

Prints extra cards on RowSprout → License, after the licence status.

do_action( 'rowsprout_license_page_after_status', $license )
Parameter Type Description
$license array The stored licence data.

Source: RowSprout Pro src/Admin/LicenseMenu.php:234

Filter RowSprout Pro Internal

The tool definitions behind RowSprout’s MCP abilities (name, description, inputSchema, handler). Each tool is registered as the WordPress Ability rowsprout/<name-in-kebab-case>.

apply_filters( 'rowsprout_mcp_tools', $tools )
Parameter Type Description
$tools array The tool definitions.

Returns: The tools.

Source: RowSprout Pro src/Features/Mcp/JsonRpc/ToolRegistry.php:295

Filter RowSprout Pro

Columns of the Status Overview modal on the Templates screen.

apply_filters( 'rowsprout_status_overview_columns', $columns )
Parameter Type Description
$columns array Entries of [ 'key' => string, 'label' => string ]: name, page ID, page link and status by default.

Returns: The columns.

Source: RowSprout Pro src/Admin/Overview/Assets.php:44

Filter RowSprout Pro

The colour legend in the Templates screen’s help tab, which explains the status bar.

apply_filters( 'rowsprout_template_status_help_items', $items )
Parameter Type Description
$items array Entries of [ 'color' => string, 'label' => string ].

Returns: The items.

Source: RowSprout Pro src/Admin/Overview/HelpTab.php:31