20th Jul '24
/
0 comments

Bricks Templates Query Loop

In the Bricks forum a user asks:

In the new update in Bricks 1.10
We have templates screenshot feature for templates.
I created a query loop for my templates and I need to call the screenshot of the template in the query loop.
Can anyone help me, please?

Bricks 1.10, currently in beta adds support for Template screenshots.

This setting is disabled by default and can be enabled at Bricks → Settings.

In the Templates dialog inside the editor, screenshots can be generated on-demand (usually for any templates already present before this setting is enabled). Screenshots will be automatically generated for all templates when the setting is on.

If you are looking to output the template names in a Bricks query loop with their screenshots, it is not enough to simply set the Image element’s source to the featured image. This is because the presence of featured image is first checked for the templates and if it is not present, automatically-generated template screenshots are pulled. Templates will typically be using auto-generated screenshots.

The logic for this is defined in /wp-content/themes/bricks/includes/admin.php.

Let’s define a custom function with the above code.

Add the following in child theme‘s functions.php (w/o the opening PHP tag) or a code snippets plugin:

<?php

function bl_get_bricks_template_image_url(): ?string {
    $post_id = get_the_ID();

    // Check if post has a thumbnail
    if ( has_post_thumbnail( $post_id ) ) {
        return get_the_post_thumbnail_url( $post_id, 'thumbnail' );
    } else {
        // Get automatically-generated template screenshot from custom directory
        $wp_upload_dir = wp_upload_dir();
        $custom_dir = $wp_upload_dir['basedir'] . '/' . BRICKS_TEMPLATE_SCREENSHOTS_DIR . '/';
        $custom_url = $wp_upload_dir['baseurl'] . '/' . BRICKS_TEMPLATE_SCREENSHOTS_DIR . '/';
        $existing_files = glob($custom_dir . "template-screenshot-$post_id-*.webp");
        $file_path = $existing_files[0] ?? null;

        if ( $file_path ) {
            return str_replace( $custom_dir, $custom_url, $file_path );
        }
    }

    // Return null if no image is found
    return null;
}

Next, whitelist the bl_get_bricks_template_image_url function.

Ex.:

<?php 

add_filter( 'bricks/code/echo_function_names', function() {
  return [
    'bl_get_bricks_template_image_url'
  ];
} );

You should also add other functions (native or custom) being used in your Bricks instance besides bl_get_bricks_template_image_url. This can be checked at Bricks → Settings → Custom code by clicking the Code review button.

More info on whitelisting can be found here.

Set up a query loop with this PHP in the query editor:

return [
	'post_type' => 'bricks_template',
	'posts_per_page' => 100, // a large number
	'no_found_rows' => true,
];

Sign code.

For showing the template screenshot, add an Image element and set its source to:

{echo:bl_get_bricks_template_image_url}

Get access to all 612 Bricks code tutorials with BricksLabs Pro

Leave the first comment

 

Related Tutorials..

Pro
Alternating Posts from Two Post Types in Bricks

Alternating Posts from Two Post Types in Bricks

How to output posts from two seperate post types, alternating in a query loop.
Categories:
Adding any Custom WP_Query loop to Bricks’ Query Loop

Adding any Custom WP_Query loop to Bricks’ Query Loop

Sometimes we may need to create a custom post loop using Bricks' query loop feature, but wish to use our own WP_Query code for more…
Pro
Post ID Query Variable-based Post Output in Bricks

Post ID Query Variable-based Post Output in Bricks

How to query a single post of a custom post type using the post ID passed to a page via a URL parameter.
Loop Item ID and Loop Item Object in Bricks

Loop Item ID and Loop Item Object in Bricks

If you are working on a Bricks site with specific requirements, chances are you need to grab the ID and/or object of the current item…
Categories:
How to create filters with IsotopeJS in Bricks (Part 3): apply multiple filters

How to create filters with IsotopeJS in Bricks (Part 3): apply multiple filters

This tutorial will review how to apply multiple filters to an isotope container using the IsotopeJS library‘s features in Bricks.
Pro
WordPress Posts using WP REST API in Bricks

WordPress Posts using WP REST API in Bricks

The steps to display posts from any WordPress site that has WP REST API enabled in Bricks builder using a custom query type.
Categories:
How to apply a custom query var to multiple query loops in Bricks

How to apply a custom query var to multiple query loops in Bricks

In this tutorial, we'll learn how to apply a PHP filter to modify the query var of multiple query loops in a single function Introduction…
Categories:
Pro
ACF Post Object Query Loop inside a Posts Query Loop in Bricks

ACF Post Object Query Loop inside a Posts Query Loop in Bricks

How to loop through a CPT and within each post, output a list of related posts.
Categories: