The following [filter hooks](https://developer.wordpress.org/reference/functions/add_filter/) can be used to customize the output of action hooks and other functions without having to modify said functions. Filters can be easily added or overwritten in child themes or plugins. See `includes/functions/hooks/`.
This is an example of how to add a link to the subscription popup menu via the `'fictioneer_filter_subscribe_buttons'` hook. The link will feature a [Font Awesome link icon](https://fontawesome.com/icons/link?s=solid&f=classic) and be added in first place. Note how the link is pulled from the author’s meta data, which you would need to add yourself as it does not exist outside this example.
```php
// Add this to your child theme's functions.php
function child_theme_extend_watch_buttons( $buttons, $post_id, $author_id ) {
Filters the intermediate output array of the tab pills inside the `fictioneer_settings_header( $tab )` function before it is imploded and rendered. The active tab is set via the `'page'` query parameter and defaults to `'general'`.
**$tabs:**
* $general (string) – Link to the general settings tab.
* $connections (string) – Link to the connections settings tab.
* $phrases (string) – Link to the phrases settings tab.
* $epubs (string) – Link to the ePUBs settings tab.
* $seo (string) – Link to the SEO settings tab (if enabled).
Filters the data to be returned as JSON by the `fictioneer_ajax_get_user_data()` function, which is used to set up the user’s local environment with Follows, Checkmarks, Reminders, and so forth to get around caching. Note that this function is accelerated and skips the WordPress initialization, as well as most plugins if the optional MU plugin has been installed.
**$data:**
* $user_id (int) – The user ID.
* $timestamp (int) – Milliseconds elapsed since the epoch.
* $follows (array|false) – The user’s Follows data or false if disabled.
* $reminders (array|false) – The user’s Reminders data or false if disabled.
* $checkmarks (array|false) – The user’s Checkmarks data or false if disabled.
* $bookmarks (string) – The user’s Bookmarks JSON as string. `'{}'` if disabled.
Filters the intermediate output array of the card control icons inside the `fictioneer_get_card_controls( $story_id, $chapter_id )` function before being rendered. Note that card controls will not be rendered without a story ID.
**$icons:**
* $reminder (string) – HTML of the Reminder icon (if enabled).
* $follow (string) – HTML of the Follow icon (if enabled).
* $checkmark (string) – HTML of the checkmark icon (if enabled).
**Parameters:**
* $story_id (int) – ID of the story.
* $chapter_id (int|null) – ID of the chapter (if chapter).
Filters the intermediate output array of the card control popup menu inside the `fictioneer_get_card_controls( $story_id, $chapter_id )` function before being rendered. Note that card controls will not be rendered without a story ID.
**$menu:**
* $follow (string) – HTML of the Follow buttons (if enabled).
* $reminder (string) – HTML of the Reminder buttons (if enabled).
* $checkmark (string) – HTML of the checkmark buttons (if enabled).
**Parameters:**
* $story_id (int) – ID of the story.
* $chapter_id (int|null) – ID of the chapter (if chapter).
Filters the intermediate output array in the `_card-chapter.php` partial before it is imploded and rendered. Contains statistics with icons such as the number of words, publishing date, comments, and so forth.
**$footer_items:**
* $words (string) – HTML for the word count.
* $publish_date (string) – Conditional. HTML for the publish date.
* $modified_date (string) – Conditional. HTML for the modified date.
* $author (string) – Conditional. HTML for the author.
* $comments (string) – HTML for the number of comments.
**Parameters**
* $post (WP_Post) – The post object.
* $args (array) – Arguments passed to the partial.
Filters the prefix string (if any) in front of a chapter title before it is rendered in the `_story-content.php` partial or `fictioneer_chapter_list` shortcode. Useful if you want to add a wrapper for styling purposes.
Filters the intermediate output array in the `fictioneer_get_list_chapter_meta_row( $data, $args )` function before it is imploded and returned in the `_story-content.php` partial or `fictioneer_chapter_list` shortcode.
Filters the intermediate output array of the chapter micro menu in the `fictioneer_get_chapter_micro_menu( $args )` function before it is imploded and rendered.
**$micro_menu:**
* $chapter_list (string) – Chapter panel in the mobile menu (if any).
* $story_link (string) – Link to the chapter’s story (if any).
Filters the intermediate output array of the chapter support links in the `fictioneer_chapter_support_links( $args )` function before it is looped and rendered. Each item is another array with `'label'`, `'icon'` markup, and `'link'`.
**$support_links:**
* $topwebfiction (string|null) – Link to www.topwebfiction.com for the story. Unsafe.
* $patreon (string|null) – Link to the author’s Patreon page. Unsafe.
* $kofi (string|null) – Link to the author’s Ko-Fi page. Unsafe.
* $subscribestar (string|null) – Link to the author’s SubscribeStar page. Unsafe.
* $paypal (string|null) – Donation link to the author’s PayPal. Unsafe.
Filters the arguments passed to the `partials/_card-chapter` template part in the `fictioneer_chapters_list( $args )` function, normally added via the `fictioneer_chapters_after_content` hook.
**$card_args:**
* $cache (boolean) – Return of `fictioneer_caching_active()`.
Filters the intermediate output array in the `_card-collection.php` partial before it is imploded and rendered. Contains statistics with icons such as the number of stories and chapters, publishing date, comments, and so forth.
**$footer_items:**
* $stories (string) – HTML for the number of stories.
* $chapters (string) – HTML for the number of chapters.
* $words (string) – HTML for the collective word count.
* $publish_date (string) – Conditional. HTML for the publish date.
* $modified_date (string) – Conditional. HTML for the modified date.
* $comments (string) – HTML for the number of comments.
**Parameters**
* $post (WP_Post) – The collection post object.
* $args (array) – Arguments passed to the partial.
* $items (WP_Post[]) – Array of featured posts (if any).
Filters the arguments passed to the `partials/_card-collection` template part in the `fictioneer_collections_list( $args )` function, normally added via the `fictioneer_collections_after_content` hook.
Filters the HTML of the `fictioneer_get_comment_badge( $user, $comment, $post_author_id )` function before it is returned for rendering. The badge class and label are inserted into `<div class="fictioneer-comment__badge CLASS"><span>LABEL</span></div>`. Possible label classes are `is-author`, `is-admin`, `is-moderator`, `is-supporter`, and `badge-override`.
Filters the modified arguments used in retrieving the comment list, both for static rendering and AJAX. This is an additional filter hooked into `'wp_list_comments_args'` before the arguments are applied to the `wp_list_comments( $args, $comments )` core function. Note that comment list arguments are somewhat peculiar and may not behave as you expect.
Filters the arguments passed to `WP_Comment_Query()` in the `comments.php` template and `fictioneer_ajax_get_comment_section()` function. The default arguments depend on the `'fictioneer_disable_comment_query'` option.
**$args:**
* $post_id (int) – Current post ID.
* $type (array|string) –`['comment', 'private']` or WP default.
* $order (string) –`get_option( 'comment_order' )` or WP default.
* $type__not_in (string|null) - `null` or `'private'` (theme query disabled).
Filters the content of the comment reply notification email in the `fictioneer_comment_notification( $parent, $comment_id, $commentdata )` function. The filter will not trigger if the reply is empty, the parent has no email address or is not flagged to receive notifications.
**$mail:**
* $to (string) – Author email address of the parent comment that was replied to.
* $subject (string) – Email subject.
* $message (string) – Email body.
* $headers (string) – Email headers.
* $attachments (array) – Email attachment. Empty by default.
**Parameters:**
* $parent (WP_Comment) – Comment object of the parent comment that was replied to.
* $comment_id (int) – ID of the reply comment.
* $commentdata (array) – Fields of the reply comment.
Filters the intermediate output array (tuples) for the `#inline-storage` data attributes before it is mapped, imploded, and rendered in the `header.php` template. These values are important for several scripts and stored in the `fcn_inlineStorage` JavaScript constant.
**attributes:**
* $permalink (['data-permalink', string]) – Escaped current URL.
* $homelink (['data-homelink', string]) – Escaped home URL.
* $post_id (['data-post-id', int|null]) – Current post ID. Unsafe since this may be an archive, author, etc.
* $story_id (['data-story-id', int|null]) – Current story ID (if story or chapter). Unsafe.
Filters the boolean return value of the `fictioneer_is_admin( $user_id )` function. This may be handy if you want to use custom roles or account for other factors not covered by default capabilities. Beware, the result determines whether the user can perform [administrator](https://wordpress.org/support/article/roles-and-capabilities/#administrator) actions.
Filters the boolean return value of the `fictioneer_is_author( $user_id )` function. This may be handy if you want to use custom roles or account for other factors not covered by default capabilities. Beware, the result determines whether the user can publish posts but does _not_ necessarily reflect the author role since other roles can publish posts too.
Filters the boolean return value of the `fictioneer_is_moderator( $user_id )` function. This may be handy if you want to use custom roles or account for other factors not covered by default capabilities. Beware, the result determines whether the user can moderate comments and users but does _not_ necessarily reflect a role since there is no default moderator role.
Filters the boolean return value of the `fictioneer_is_editor( $user_id )` function. This may be handy if you want to use custom roles or account for other factors not covered by default capabilities. Beware, the result determines whether the user can perform [editor](https://wordpress.org/support/article/roles-and-capabilities/#editor) actions.
Filters the intermediate output array of the `fictioneer_mobile_quick_buttons()` function before it is imploded and rendered via the `fictioneer_mobile_menu_bottom` hook. By default and depending on the page, the output can contain buttons to darken and brighten the site, toggle chapter options, open the formatting modal, or change site settings.
**$buttons:**
* $minimalist (string) – Toggles the minimalist mode.
* $darken (string) – Darken the site by 20 percent.
* $brighten (string) – Brighten the site by 20 percent.
* $justify (string) – Toggle chapter text justify.
Filters the intermediate output array of the `fictioneer_mobile_user_menu()` function before it is imploded and rendered via the `fictioneer_mobile_menu_main_frame_panels` hook. By default and depending on the login status, the output can contain the user’s account, reading lists and bookmarks, the site’s Discord link, modal toggles for chapter formatting and site settings, anchors to the current bookmark and comments section, as well as the logout link.
**$items:**
* $account (string) – Link to the user’s account (if set).
* $search (string) – Link to search form.
* $site_settings (string) – Site settings modal.
* $discord (string) – Link to the site’s Discord (if set).
* $bookshelf (string) – Link to the user’s reading lists (if set).
* $bookmarks (string) – Link to the user’s bookmarks page (if set).
* $formatting (string) – Chapter formatting modal. Only in chapters.
* $comment_jump (string) – Scrolls to the comment section. Only in chapters.
* $bookmark_jump (string) – Scrolls to the current bookmark. Only in chapters.
Filters the intermediate output array in the `_card-page.php` partial before it is imploded and rendered. Contains statistics with icons such as the author, publishing date, and comments.
**$footer_items:**
* $author (string) – Conditional. HTML for the author.
* $publish_date (string) – HTML for the publish date.
* $comments (string) – HTML for the number of comments (if more than 0).
**Parameters**
* $post (WP_Post) – The page post object.
* $args (array) – Arguments passed to the partial.
Filters the intermediate output array in the `_card-post.php` partial before it is imploded and rendered. Contains statistics with icons such as the author, publishing date, and comments.
**$footer_items:**
* $author (string) – Conditional. HTML for the author.
* $publish_date (string) – HTML for the publish date.
* $comments (string) – HTML for the number of comments.
**Parameters**
* $post (WP_Post) – The post object.
* $args (array) – Arguments passed to the partial.
Filters the arguments passed to the `partials/_card-recommendation` template part in the `fictioneer_recommendations_list( $args )` function, normally added via the `fictioneer_recommendations_after_content` hook.
Filters the intermediate output array of the `fictioneer_root_attributes()` function in the `header.php` template before it is looped and rendered. Note that the array keys are used as attribute names and include hyphens.
Filters the RSS link returned by the `fictioneer_get_rss_link( $post_type, $post_id )` function. Note that the function will always return `false` if the `fictioneer_enable_theme_rss` option is not enabled, regardless of this filter.
**Parameters:**
* $feed (int) – The escaped RSS feed URL, either the main or story (chapters) feed.
* $post_type (string) – The post type the RSS is for. This can differ from the current post type.
* $post_id (int) – The post ID the RSS is for. This can differ from the current post ID.
Filters the query arguments in the `fictioneer_latest_chapters` shortcode. The optional taxonomy arrays can include categories, tags, fandoms, genres, and characters.
Filters the query arguments in the `fictioneer_latest_recommendations` shortcode. The optional taxonomy arrays can include categories, tags, fandoms, genres, and characters.
Filters the query arguments in the `fictioneer_latest_stories` shortcode. The optional taxonomy arrays can include categories, tags, fandoms, genres, and characters.
Filters the query arguments in the `fictioneer_latest_updates` shortcode. The optional taxonomy arrays can include categories, tags, fandoms, genres, and characters.
Filters the query arguments in the `fictioneer_showcase` shortcode. The optional taxonomy arrays can include categories, tags, fandoms, genres, and characters.
Filters the boolean return value of the `fictioneer_enable_shortcode_transients()` function. By default, this depends on the `FICTIONEER_SHORTCODE_TRANSIENT_EXPIRATION` constant being greater than -1 and the `fictioneer_caching_active()` function returning false. Because the Transients would interfere with caching. If you exclude a page from caching, it might make sense to turn them on for that page.
Filters the option array of URL/label tuples for the date popup menu in the `fictioneer_sort_order_filter_interface( $args )` function before it is rendered. Can be any positive integer (days) or [strtotime](https://www.php.net/manual/en/function.strtotime.php) compatible string. See `fictioneer_append_date_query(...)`. Includes '0', '1', '3', '1 week ago', '1 month ago', '3 months ago', '6 months ago', and '1 year ago'.
**$options:**
* '0' (array) – Tuple of $label (Any Date) and unescaped $url (`...ago=0&...#sof`).
* '1' (array) – Tuple of $label (Past 24 Hours) and unescaped $url (`...ago=1&...#sof`).
* '3' (array) – Tuple of $label (Past 3 Days) and unescaped $url (`...ago=3&...#sof`).
* '1_week_ago' (array) – Tuple of $label (Past Week) and unescaped $url (`...ago=1+week+ago&...#sof`).
* '1_month_ago' (array) – Tuple of $label (Past Month) and unescaped $url (`...ago=1+month+ago&...#sof`).
* '3_months_ago' (array) – Tuple of $label (Past 3 Months) and unescaped $url (`...ago=3+months+ago&...#sof`).
* '6_months_ago' (array) – Tuple of $label (Past 6 Months) and unescaped $url (`...ago=6+months+ago&...#sof`).
* '1_year_ago' (array) – Tuple of $label (Past Year) and unescaped $url (`...ago=1+year+ago&...#sof`).
**Parameters:**
* $current_url (array) – Current URL with all query parameters to sort, order, and filter included. Used to build option links.
**$args:**
* $current_page (int) – Current page if paginated or `1`.
* $post_id (int) – Current post ID.
* $queried_type (string) – Queried post type.
* $query_args (array) – Query arguments used.
* $order (string) – Current order. Defaults to `'desc'`.
* $orderby (string) – Current orderby. Defaults to `'modified'` in list templates and `'date'` in archives.
Filters the option array of URL/label tuples for the orderby popup menu in the `fictioneer_sort_order_filter_interface( $args )` function before it is rendered. Allows and includes 'modified', 'date', 'title', and 'rand' (excluded).
**$options:**
* 'modified' (array) – Tuple of $label (Updated) and unescaped $url (`...orderby=modified&...#sof`).
* 'date' (array) – Tuple of $label (Published) and unescaped $url (`...orderby=date&...#sof`).
* 'title' (array) – Tuple of $label (By Title) and unescaped $url (`...orderby=title&...#sof`).
**Parameters:**
* $current_url (array) – Current URL with all query parameters to sort, order, and filter included. Used to build option links.
**$args:**
* $current_page (int) – Current page if paginated or `1`.
* $post_id (int) – Current post ID.
* $queried_type (string) – Queried post type.
* $query_args (array) – Query arguments used.
* $order (string) – Current order. Defaults to `'desc'`.
* $orderby (string) – Current orderby. Defaults to `'modified'` in list templates and `'date'` in archives.
Filters the option array of URL/label tuples for the post type popup menu in the `fictioneer_sort_order_filter_interface( $args )` function before it is rendered. Only rendered in archives. Includes 'any', 'post, 'fcn_story', 'fcn_chapter', 'fcn_collection', and 'fcn_recommendation'.
**$options:**
* $any (array) – Tuple of $label (All Posts) and unescaped $url (`...post_type=any&...#sof`).
* $post (array) – Tuple of $label (Blog Posts) and unescaped $url (`...post_type=post&...#sof`).
* $fcn_story (array) – Tuple of $label (Stories) and unescaped $url (`...post_type=fcn_story&...#sof`).
* $fcn_chapter (array) – Tuple of $label (Chapters) and unescaped $url (`...post_type=fcn_chapter&...#sof`).
* $fcn_collection (array) – Tuple of $label (Collections) and unescaped $url (`...post_type=fcn_collection&...#sof`).
* $fcn_recommendation (array) – Tuple of $label (Recommendations) and unescaped $url (`...post_type=fcn_recommendation&...#sof`).
**Parameters:**
* $current_url (array) – Current URL with all query parameters to sort, order, and filter included. Used to build option links.
**$args:**
* $current_page (int) – Current page if paginated or `1`.
* $post_id (int) – Current post ID.
* $queried_type (string) – Queried post type.
* $query_args (array) – Query arguments used.
* $order (string) – Current order. Defaults to `'desc'`.
* $orderby (string) – Current orderby. Defaults to `'modified'` in list templates and `'date'` in archives.
Filters the arguments passed to the `partials/_card-story` template part in the `fictioneer_stories_list( $args )` function, normally added via the `fictioneer_stories_after_content` hook.
Filters the statistics for all stories rendered by the `fictioneer_stories_statistics( $args )` function, normally added via the `fictioneer_stories_after_content` hook. Each tuple in the `$statistics` array has `$label` and `$content`.
**$statistics:**
* $stories (string) – Number of published stories.
* $words (string) – Total word count of published stories.
* $comments (string) – Total number of comments in stories/chapters.
* $reading (string) – Total reading time approximated from word count.
Filters the intermediate output array in the `_card-story.php` partial before it is imploded and rendered. Contains statistics with icons such as the number of chapters, publishing date, comments, and so forth.
**$footer_items:**
* $chapters (string) – HTML for the number of chapters.
* $words (string) – HTML for the total word count.
* $publish_date (string) – Conditional. HTML for the publish date.
* $modified_date (string) – Conditional. HTML for the modified date.
* $author (string) – Conditional. HTML for the author.
* $comments (string) – HTML for the number of comments.
* $status (status) – HTML for the status.
**Parameters**
* $post (WP_Post) – The post object.
* $args (array) – Arguments passed to the partial.
Filters the intermediate output array of the `fictioneer_get_story_buttons( $args )` function before it is imploded and returned. Used inside `fictioneer_story_actions( $args )` and rendered via the `fictioneer_story_after_content` hook.
**$output:**
* $subscribe (string|null) – Optional. HTML of the subscribe button and popup menu.
* $epub (string|null) – Optional. HTML for the ePUB (generated) download button.
* $ebook (string|null) – Optional. HTML for the ebook (uploaded) download button.
* $reminder (string|null) – Optional. HTML for the Read Later button.
* $follow (string|null) – Optional. HTML for the Follow button.
Filters the intermediate output array of the `fictioneer_get_subscribe_options( $post_id, $author_id, $feed )` function before it is imploded and returned. Normally accounts for Patreon, Ko-Fi, SubscribeStar, [Feedly](https://feedly.com/), and [Inoreader](https://www.inoreader.com/).
**$buttons:**
* $patreon (string) – Optional. Link to Patreon if set for post or author.
* $kofi (string) – Optional. Link to Ko-Fi if set for post or author.
* $subscribestar (string) – Optional. Link to SubscribeStar if set for post or author.
* $feedly (string) – RSS subscription link to Feedly.
* $inoreader (string) – RSS subscription link to Inoreader.
**Parameters:**
* $post_id (int) – The post ID. Defaults to the current post ID.
* $author_id (int) – The author ID. Defaults to the current author ID.
Filters the source array of selected translation strings used in the theme, see `fcntr( $key, $escape )` function in `includes/functions/_utility.php`. You cannot translate the whole theme with this, but give it a personal touch.
**Parameters:**
* $strings (array) – Associative array of translation keys and values.
Filters the intermediate output array of the `fictioneer_user_menu_items()` function before it is imploded and returned. Contains links to the user’s account, reading lists, and bookmarks as well as the site’s Discord, site settings modal toggle, and logout link. Used in the `partials/_icon-menu.php` partial if the user is logged in.
**$items:**
* $account (string|null) – Optional. List item with link to the user’s account.
* $site_settings (string) – List item with site settings modal toggle.
* $bookshelf (string|null) – Optional. List item with link to the user’s lists.
* $bookmarks (string|null) – Optional. List item with link to the user’s bookmarks.
* $discord (string|null) – Optional. List item with link to the site’s Discord server.
* $logout (string) – List item with link to log out of the site.