This is a reference article about working with the different positioning of specific action or work added in default loop.
This will help us to move/reposition specific elements when working on Post Page, single post and more.
In genesis/lib/structure/post.php, we have the following code:
// HTML5 Hooks. add_action( 'genesis_entry_header', 'genesis_do_post_format_image', 4 ); add_action( 'genesis_entry_header', 'genesis_entry_header_markup_open', 5 ); add_action( 'genesis_entry_header', 'genesis_entry_header_markup_close', 15 ); add_action( 'genesis_entry_header', 'genesis_do_post_title' ); add_action( 'genesis_entry_header', 'genesis_post_info', 12 ); add_action( 'genesis_entry_content', 'genesis_do_post_image', 8 ); add_action( 'genesis_entry_content', 'genesis_do_post_content' ); add_action( 'genesis_entry_content', 'genesis_do_post_content_nav', 12 ); add_action( 'genesis_entry_content', 'genesis_do_post_permalink', 14 ); add_action( 'genesis_entry_footer', 'genesis_entry_footer_markup_open', 5 ); add_action( 'genesis_entry_footer', 'genesis_entry_footer_markup_close', 15 ); add_action( 'genesis_entry_footer', 'genesis_post_meta' ); add_action( 'genesis_after_entry', 'genesis_do_author_box_single', 8 ); add_action( 'genesis_after_entry', 'genesis_adjacent_entry_nav' ); add_action( 'genesis_after_entry', 'genesis_get_comments_template' ); // Other. add_action( 'genesis_loop_else', 'genesis_do_noposts' ); add_action( 'genesis_after_endwhile', 'genesis_posts_nav' );
Usage:
The Basic use is change the remove the default action with same priority and add it in a different location with the help of Genesis Hooks.
Here is the code to move featured image from entry content to (before-content) after or in entry header with a slightly different priority.
You can use this in child-theme/functions.php
//* Reposition featured image after entry header remove_action( 'genesis_entry_content', 'genesis_do_post_image', 8 ); add_action( 'genesis_entry_header', 'genesis_do_post_image', 15 ); //1,5,9
or with a lower priority in entry content.
//* Reposition featured image before entry header remove_action( 'genesis_entry_content', 'genesis_do_post_image', 8 ); add_action( 'genesis_entry_content', 'genesis_do_post_image', 1 ); //5
You can play with it to have more control.
Here is the loop function from genesis/lib/structure/loops.php
/** * Standard loop, meant to be executed without modification in most circumstances where content needs to be displayed. * * It outputs basic wrapping HTML, but uses hooks to do most of its content output like title, content, post information * and comments. * * The action hooks called are: * * - `genesis_before_entry` * - `genesis_entry_header` * - `genesis_before_entry_content` * - `genesis_entry_content` * - `genesis_after_entry_content` * - `genesis_entry_footer` * - `genesis_after_endwhile` * - `genesis_loop_else` (only if no posts were found) * * @since 1.1.0 * * @return void Return early after legacy loop if not supporting HTML5. */ function genesis_standard_loop() { if ( have_posts() ) { /** * Fires inside the standard loop, before the while() block. * * @since 2.1.0 */ do_action( 'genesis_before_while' ); while ( have_posts() ) { the_post(); /** * Fires inside the standard loop, before the entry opening markup. * * @since 2.0.0 */ do_action( 'genesis_before_entry' ); genesis_markup( [ 'open' => '<article %s>', 'context' => 'entry', ] ); /** * Fires inside the standard loop, to display the entry header. * * @since 2.0.0 */ do_action( 'genesis_entry_header' ); /** * Fires inside the standard loop, after the entry header action hook, before the entry content. * opening markup. * * @since 2.0.0 */ do_action( 'genesis_before_entry_content' ); genesis_markup( [ 'open' => '<div %s>', 'context' => 'entry-content', ] ); /** * Fires inside the standard loop, inside the entry content markup. * * @since 2.0.0 */ do_action( 'genesis_entry_content' ); genesis_markup( [ 'close' => '</div>', 'context' => 'entry-content', ] ); /** * Fires inside the standard loop, before the entry footer action hook, after the entry content. * opening markup. * * @since 2.0.0 */ do_action( 'genesis_after_entry_content' ); /** * Fires inside the standard loop, to display the entry footer. * * @since 2.0.0 */ do_action( 'genesis_entry_footer' ); genesis_markup( [ 'close' => '</article>', 'context' => 'entry', ] ); /** * Fires inside the standard loop, after the entry closing markup. * * @since 2.0.0 */ do_action( 'genesis_after_entry' ); } // End of one post. /** * Fires inside the standard loop, after the while() block. * * @since 1.0.0 */ do_action( 'genesis_after_endwhile' ); } else { // If no posts exist. /** * Fires inside the standard loop when they are no posts to show. * * @since 1.0.0 */ do_action( 'genesis_loop_else' ); } // End loop. }