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 its child pages automatically:

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

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

    return $display;
}, 10, 2 );

In the element, set the Display Rule to the parent page and replace 1180 with the ID of your Element, and 415 with the ID of the parent page.

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.