generate_element_display

The generate_element_display allows us to bypass the Display Rules, so we can enable or disable an Element under our own conditions.

This filter replaces the previous generate_header_element_display, generate_hook_element_display and generate_layout_element_display.

Display an Element to a Specific Author

For example, if we want to assign a specific element to Author Tom only:

add_filter( 'generate_element_display', function( $display, $element_id ) {
    if ( 100 === $element_id && is_author( 'Tom' ) ) {
        $display = true;
    }

    return $display;
}, 10, 2 );

You need to replace 100 with the ID of your Element.

Display an Element to a Parent Page and All Child Pages

Another useful example is to set the hook to display on the parent page and all the child pages automatically:

add_filter( 'generate_element_display', function( $display, $element_id ) {
    global $post;

    if ( 1180 === $element_id && ( is_page() && $post->post_parent == '415' ) ) {
        $display = true;
    }

    return $display;
}, 10, 2 );

You need to replace 1180 with the ID of your Element, and 415 with the ID of the parent page.

Display an Element to the First Page of Archives Only

Another request that we get from time to time is to only show page hero on the first archive or posts page and turn off for 2nd and subsequent pages of posts. This can be done with the snippet below:

add_filter( 'generate_element_display', function( $display, $element_id ) {
    if ( 100 === $element_id && is_paged() ) {
        $display = false;
    }

    return $display;
}, 10, 2 );

You need to replace 100 with the ID of your Element.

Remove an Element when No Featured Image is Uploaded

If you would like to remove a block element page hero automatically when no featured image is uploaded instead of using the display rules manually, this snippet can be used:

add_filter( 'generate_element_display', function( $display, $element_id ) {
    if ( 100 === $element_id ) {
        if ( ! has_post_thumbnail() ) {
            $display = false;
        }
    }

    return $display;
}, 10, 2 );

You need to replace 100 with the ID of your Element.