Checking if the current post has been published within the last x days

Looking to conditionally output an element if the current post (either in a query loop or when viewing a single post) has been published in the last x number of days?

Here’s how.

Step 1

Register a custom function with the number of days as a parameter and returns true or false depending on whether the current post is written in those number of days.

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

<?php

/**
 * Check if the current post is published within the last X days.
 *
 * @param int $days Number of days to check against. Default is 30.
 * @return bool True if the post is published within the specified number of days, false otherwise.
 */
function bl_is_post_published_within_days( int $days = 30 ): bool {
    $current_time = time();
    $post_time    = get_the_date( 'U' );
    $time_diff    = $current_time - $post_time;
    $days_in_seconds = $days * 24 * 60 * 60;

    return $time_diff < $days_in_seconds;
}

We are setting the default function argument value to be 30 days.

Step 2

The function can now be used like this:

if ( bl_is_post_published_within_days() )

for 30 days

or

if ( bl_is_post_published_within_days( 7 ) )

for 7 days

If you are using Bricks make sure you whitelist the bl_is_post_published_within_days function.

Ex.:

<?php 

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

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

More info on whitelisting can be found here.

Then set up a dynamic data condition like this:

{echo:bl_is_post_published_within_days}

If you want to check for number of days other than 30, specify it as an argument like this:

{echo:bl_is_post_published_within_days(7)}

Reference

https://brickslabs.com/new-ribbon-for-posts-in-bricks/