Need a complete reference of action hooks and filters found in the Genesis Framework? Here ya go.
I’m not going to add a lot of commentary to this post as it’s truly meant as a reference guide, not a tutorial. My intent is to let you know all of the locations where you can hook into Genesis as well as what content is filterable. It’s up to you to figure out what to do with these hooks, but if you want a tip of where to start, copy the hook and do a universal search in the framework files to see where it’s used. Then read the documentation. 🙂
If you’re more interested in how to use hooks to customize or create Genesis child themes, check out the resources at the bottom of this post.
Hook Reference, engage your engines. Let’s begin.
p.s. There are affiliate links in this post. Watch out, ’cause they bite! Here’s my affiliate disclaimer if you’re not sure what that’s all about.
Genesis Template Action Hooks
If you crack open the Genesis Framework files, you’ll notice that there are standard template files in the root directory. There are a variety of hooks present in these files, so for lack of a more creative term I’m going to call them “template hooks.”
Note, however, that these are not the only hooks you could use in a template. See the next section for to reference structural hooks.
Hint: To find available action hooks in any theme or plugin, search the codebase for do_action
.
genesis/comments.php
- genesis_before_comments
- genesis_comments
- genesis_after_comments
- genesis_before_pings
- genesis_pings
- genesis_after_pings
- genesis_before_comment_form
- genesis_comment_form
- genesis_after_comment_form
genesis/footer.php
- genesis_before_footer
- genesis_footer
- genesis_after_footer
- genesis_after
genesis/header.php
- genesis_doctype
- genesis_title
- genesis_meta
- genesis_before
- genesis_before_header
- genesis_header
- genesis_after_header
genesis/sidebar-alt.php
- genesis_before_sidebar_alt_widget_area
- genesis_sidebar_alt
- genesis_after_sidebar_alt_widget_area
genesis/sidebar.php
- genesis_before_sidebar_widget_area
- genesis_sidebar
- genesis_after_sidebar_widget_area
Genesis Structural Action Hooks
The previous set of hooks are ones used specifically in Genesis’ theme template files. The following hooks are the ones found in the /lib/ folder. Most deal with front-facing content and few deal only with the WP admin area. I’ll group the latter toward the end.
genesis/lib/framework.php
- genesis_before_content_sidebar_wrap
- genesis_before_content
- genesis_before_loop
- genesis_loop
- genesis_after_loop
- genesis_after_content
- genesis_after_content_sidebar_wrap
genesis/lib/init.php
- genesis_pre
- genesis_pre_framework
- genesis_init
- genesis_setup
genesis/lib/structure/archive.php
- genesis_archive_title_descriptions
genesis/lib/structure/comments.php
- genesis_list_comments
- genesis_list_pings
- genesis_before_comment
- genesis_after_comment
genesis/lib/structure/header.php
- genesis_site_title
- genesis_site_description
- genesis_header_right
genesis/lib/structure/loops.php
Note that I’m only including HTML5 hooks added in Genesis 2.0+. The old XHTML hooks should be thrown down the garbage disposal.
- genesis_before_while
- genesis_before_entry
- genesis_entry_header
- genesis_before_entry_content
- genesis_entry_content
- genesis_after_entry_content
- genesis_entry_footer
- genesis_after_entry
- genesis_after_endwhile
- genesis_loop_else
- genesis_before_post
- genesis_before_post_title
- genesis_post_title
- genesis_after_post_title
- genesis_before_post_content
- genesis_post_content
- genesis_after_post_content
- genesis_after_post
- genesis_after_endwhile
- genesis_loop_else
genesis/lib/structure/post.php
- genesis_reset_loops
genesis/lib/structure/menu.php
- genesis_register_nav_menus
genesis/lib/admin/menu.php
- genesis_admin_menu
genesis/lib/classes/admin.php
- genesis_admin_init
Still with me?
Genesis Filter Hooks
Most of the time when developers talk about hooks, they’re talking specifically about action hooks. But hooks come in two flavors: actions and filters. And guess what? Filters have feelings, too, so that’s why I’m including a filter reference.
Hint: To search for what filter hooks are available in any theme or plugin, search the codebase for apply_filters
.
/genesis/404.php
- genesis_404_entry_title
- genesis_404_entry_content
/genesis/lib/admin/cpt-archive-settings.php
- genesis_cpt_archive_settings_page_label
- genesis_cpt_archive_settings_menu_label
- genesis_cpt_archive_settings_capability_ . $this->post_type->name
- genesis_cpt_archive_settings_label
/genesis/lib/admin/import-export.php
- genesis_export_options
/genesis/lib/admin/term-meta.php
- genesis_term_meta_defaults
- genesis_term_meta
- genesis_term_meta_{$meta_key}
/genesis/lib/admin/user-meta.php
- genesis_user_meta_defaults
/genesis/lib/classes/breadcrumb.php
- genesis_breadcrumb_args
- genesis_build_crumbs
- genesis_archive_crumb
- genesis_single_crumb
- genesis_home_crumb
- genesis_blog_crumb
- genesis_search_crumb
- genesis_404_crumb
- genesis_page_crumb
- genesis_attachment_crumb
- genesis_post_crumb
- genesis_cpt_crumb
- genesis_category_crumb
- genesis_tag_crumb
- genesis_tax_crumb
- genesis_year_crumb
- genesis_month_crumb
- genesis_day_crumb
- genesis_author_crumb
- genesis_post_type_crumb
- genesis_breadcrumb_link
/genesis/lib/classes/class-genesis-script-loader.php
- genesis_superfish_args_url
- genesis_toggles
/genesis/lib/classes/sanitization.php
- genesis_available_sanitizer_filters
/genesis/lib/functions/formatting.php
- get_the_content_limit_allowedtags
- get_the_content_more_link
- get_the_content_limit
- the_content_limit
/genesis/lib/functions/general.php
- genesis_sitemap_output
- genesis_canonical_url
/genesis/lib/functions/head.php
- genesis_get_seo_meta_description
- genesis_get_seo_meta_keywords
- genesis_get_robots_meta_content
- genesis_pre_load_favicon
- genesis_favicon_url
/genesis/lib/functions/image.php
- genesis_get_image_default_args
- genesis_pre_get_image
- genesis_get_image
/genesis/lib/functions/layout.php
- genesis_initial_layouts
- genesis_get_layouts
- genesis_site_layout
- genesis_structural_wrap-{$context}
/genesis/lib/functions/markup.php
- genesis_markup_{$args[‘context’]}
- genesis_markup_{$args[‘context’]}_output
- genesis_markup_{$args[‘context’]}_open
- genesis_markup_{$args[‘context’]}_close
- genesis_markup_open
- genesis_markup_close
- genesis_attr_{$context}
- genesis_attr_{$context}_output
/genesis/lib/functions/menu.php
- genesis_superfish_enabled
/genesis/lib/functions/options.php
- genesis_pre_get_option_{$key}
- genesis_options
/genesis/lib/functions/widgetize.php
- genesis_register_sidebar_defaults
- genesis_register_widget_area_defaults
- genesis_widget_area_defaults
- genesis_sidebar_title_output
/genesis/lib/init.php
- genesis_theme_support_menus
- genesis_theme_support_structural_wraps
- genesis_settings_field
- genesis_seo_settings_field
- genesis_cpt_archive_settings_field_prefix
/genesis/lib/shortcodes/footer.php
- genesis_footer_backtotop_shortcode
- genesis_footer_copyright_shortcode
- genesis_footer_childtheme_link_shortcode
- genesis_footer_genesis_link_shortcode
- genesis_footer_studiopress_link_shortcode
- genesis_footer_wordpress_link_shortcode
- genesis_footer_site_title_shortcode
- genesis_footer_home_link_shortcode
- genesis_footer_loginout_shortcode
/genesis/lib/shortcodes/post.php
- genesis_post_date_shortcode
- genesis_post_time_shortcode
- genesis_post_modified_date_shortcode
- genesis_post_modified_time_shortcode
- genesis_post_author_shortcode
- genesis_post_author_link_shortcode
- genesis_post_author_posts_link_shortcode
- genesis_post_comments_shortcode
- genesis_post_tags_shortcode
- genesis_post_categories_shortcode
- genesis_post_terms_shortcode
- genesis_edit_post_link
- genesis_post_edit_shortcode
/genesis/lib/structure/archive.php
- genesis_term_intro_text_output
- genesis_author_intro_text_output
- genesis_cpt_archive_intro_text_output
/genesis/lib/structure/comments.php
- genesis_title_comments
- genesis_prev_comments_link_text
- genesis_next_comments_link_text
- genesis_no_comments_text
- genesis_comments_closed_text
- genesis_title_pings
- genesis_no_pings_text
- genesis_comment_list_args
- genesis_ping_list_args
- comment_author_says_text
- genesis_comment_awaiting_moderation
- genesis_show_comment_date
- genesis_comment_awaiting_moderation
- genesis_comment_form_args
/genesis/lib/structure/footer.php
- genesis_footer_widget_areas
- genesis_footer_backtotop_text
- genesis_footer_creds_text
- genesis_footer_output
- genesis_footer_scripts
/genesis/lib/structure/header.php
- genesis_viewport_value
- genesis_canonical
- genesis_header_scripts
- genesis_site_title_wrap
- genesis_seo_title
- genesis_site_description_wrap
- genesis_seo_description
- genesis_skip_links_output
/genesis/lib/structure/loops.php
- genesis_custom_loop_args
- genesis_grid_loop_post_class
/genesis/lib/structure/post.php
- genesis_post_title_text
- genesis_link_post_title
- genesis_entry_title_wrap
- genesis_post_title_output
- genesis_post_info
- genesis_edit_post_link
- genesis_post_permalink
- genesis_noposts_text
- genesis_post_meta
- genesis_author_box_gravatar_size
- genesis_author_box_title
- genesis_author_box
- genesis_prev_link_text
- genesis_next_link_text
/genesis/lib/structure/search.php
- genesis_search_text
- genesis_search_button_text
- genesis_search_form_label
- genesis_search_form
/genesis/lib/widgets/featured-page-widget.php
- genesis_featured_page_title
/genesis/lib/widgets/featured-post-widget.php
- genesis_featured_post_title
/genesis/lib/widgets/user-profile-widget.php
- genesis_gravatar_sizes
/genesis/search.php
- genesis_search_title_text
- genesis_search_title_output
Additional Resources on using Genesis Hooks
- Up and Running with the Genesis Framework (my course at LinkedIN Learning)
- Customizing Themes with Genesis (my course at LinkedIN Learning)
- Advanced WordPress: Action and Filter Hooks (my course at LinkedIN Learning)
- Genesis Child Theme Development: How to Make it Yours (article)
- Genesis Visual Hook Guide (free plugin – great for seeing where hooks are on a page)
- Genesis Extender (paid plugin – great for getting your feet wet working with hooks)
- Genesis Code Snippets (code examples of how you can use certain hooks. Note you have to be logged into your StudioPress account to view this link)
Thank you Carrie. You saved my life today 🙂
Well I’m glad to hear it!
Loved this post 🙂
Hi, how you doing? sorry to take some mins from you valuable time, Im getting crazy ? I have a client that has Genesis installed with Mai Law Pro (child theme) I had to create a plugin where they can add easily the markup from the header, so in the future it gets easy to make changes! for the posts and some other pages, I am able to call the hook genesis_before_header, but for the Pages, any of the hooks are working for me, do you know which are the hooks for the WordPress Pages? I have 2 days fighting and reading tutorials like crazy, but nothing helps, pls, any advise?
regards
Hi Raiam, there are too many unknown factors for me to know how to help. You could use the Genesis Visual Hook Guide plugin to confirm hook locations on a page. You could also use a plugin like Query Monitor to see which hooks are firing (and in what order) to help you debug.
Hi Carrie – great resource! Question for you: I have oversight of a website which is built on Genesis and I need to update Genesis and WordPress to 5.24. Is it advisable to update Genesis first or WordPress first?
Hey Patrick! Update Genesis first, then WordPress. But be sure to update in a staging environment first, not on the live site! 🙂
Hi Carrie, Good resource for anyone working with Genesis Framework. Though as mentioned by you we can easily find the hooks by looking into codebase but not everyone is good with codes. This saves a lot of time.