Block Logic - Full Block Display Control
Block Logic adds a "Block Logic" field to the block editor, that lets you show or hide any block based on conditions.
Next Milestone 400
Unlock Exact Install Count
See the precise estimated active installs for this plugin, calculated from real-time ranking data.
- Exact install estimates within tiers
- Track install growth over time
- Milestone progress predictions
Rank Changes
Downloads Growth
Upgrade to Pro
Unlock 30-day, 90-day, and yearly download history charts with a Pro subscription.
Upgrade NowReviews & Ratings
Tracked Keywords
Showing 0 of 0| Keyword | Position | Change | Type | Updated |
|---|---|---|---|---|
| No keyword data available yet. | ||||
Unlock Keyword Analytics
Track keyword rankings, search positions, and discover new ranking opportunities with a Pro subscription.
- Full keyword position tracking
- Historical ranking data
- Competitor keyword analysis
Track This Plugin
Get detailed analytics, keyword tracking, and position alerts delivered to your inbox.
Start Tracking FreePlugin Details
- Version
- 2.1.5
- Last Updated
- Jan 05, 2026
- Requires WP
- 6.5+
- Tested Up To
- 6.9
- PHP Version
- 5.6 or higher
- Author
- Sascha Paukner
Support & Rating
- Rating
- ★ ★ ★ ★ ★ 5
- Reviews
- 13
- Support Threads
- 0
- Resolved
- 0%
Keywords
Upgrade to Pro
Unlock keyword rankings, search positions, and detailed analytics with a Pro subscription.
Upgrade NowFrequently Asked Questions
Common questions about Block Logic - Full Block Display Control
! (not) to reverse the logic, eg !is_home() is TRUE when this is NOT the home page.
|| (or) to combine conditions. X || Y is TRUE when either X or Y is true.
&& (and) to make conditions more specific. X && Y is TRUE when both X and Y are true.
WordPress Conditional Checks
is_home() -- just the main blog page
!is_page('about') -- everywhere except this specific WP page
is_user_logged_in() -- shown when a user is logged in
is_category(array(5,9,10,11)) -- category page of one of the given category IDs
is_single() && in_category('baked-goods') -- single post that’s in the “baked-goods” category
current_user_can('administrator') -- admin-only blocks
strpos($_SERVER['HTTP_REFERER'], "google.com") !== false -- blocks to show when clicked through from Google
is_category() && in_array($cat, get_term_children(5, 'category')) -- category page that’s a descendant of category 5
in_array(77, get_post_ancestors($post)) -- WP page that is a child of page 77
is_page('home') || $post->post_parent == 13 -- home page or the page that’s a child of page 13
WordPress Post & Term Checks
has_term('special-offer', 'category', $post) -- post has a specific category term
get_post_meta(get_the_ID(), 'featured', true) == 'yes' -- check a meta field value
get_post_type() == 'product' -- current post type is a WooCommerce product
is_sticky() -- sticky posts only
has_post_thumbnail() -- only posts/pages with a featured image
get_the_category() -- fetch post categories (can be used in expressions)
get_the_tags() -- fetch post tags
WooCommerce-Specific Checks
WC()->cart && WC()->cart->get_cart_contents_count() > 0 -- cart has at least one item
WC()->cart && WC()->cart->total > 50 -- cart total is more than $50
is_product() && get_post_meta(get_the_ID(), '_sale_price', true) !== '' -- product has a sale price
is_product_category('shoes') && WC()->cart -- category page “shoes” and cart exists
is_user_logged_in() && WC()->cart && WC()->cart->get_cart_contents_count() > 0 -- logged-in user and cart has items
ACF Checks (Read-only)
get_field('featured') == true -- ACF field “featured” is true
get_sub_field('discount') > 0 -- ACF subfield “discount” has a value
get_row() > 0 -- there are ACF repeater rows
get_field_object('product_info')['value'] !== '' -- check ACF field object value
PHP Helpers
in_array('baked-goods', wp_get_post_categories($post)) -- category array check
strpos(get_permalink($post), 'sale') !== false -- check if permalink contains “sale”
empty(get_post_meta(get_the_ID(), 'stock', true)) -- post has no stock meta
count(WC()->cart->get_cart()) > 1 -- more than 1 item in cart
time() > strtotime('2026-01-01') -- check current timestamp
number_format(WC()->cart->total, 2) -- format cart total
round(get_post_meta(get_the_ID(), 'rating', true)) > 4 -- rating is greater than 4
Supported functions and globals
Block Logic comes with a set of safe WordPress, WooCommerce, ACF, and PHP helper functions, as well as selected globals and superglobals. These can be used in block logic expressions to control the display of blocks dynamically.
Allowed Superglobals
By default, only safe, read-only superglobals are available. Developers can extend this list via the block_logic_allowed_superglobals filter.
$_GET -- query parameters
$_POST -- submitted form data
$_SERVER -- server/environment info (e.g., $_SERVER['HTTP_REFERER'])
$_COOKIE -- cookies
Example usage:
!empty($_GET['ref']) && strpos($_SERVER['HTTP_REFERER'], 'google.com') !== false
Allowed WordPress Globals
These global variables are accessible inside block logic expressions. Extend the list via the block_logic_allowed_globals filter.
$post -- current post object
$wp_query -- main query object
$wp_the_query -- backup of main query
$wp -- WP environment object
$wp_rewrite -- rewrite rules
$current_user -- WP_User object of the current user
$wp_version -- WordPress version
Example usage:
in_array($post->ID, get_post_ancestors($post)) && is_user_logged_in()
Allowed WordPress Functions
Overview
current_user_can('administrator') -- check user capabilities
get_current_user_id() -- current user ID
get_option('blogname') -- get site title
get_post_meta(get_the_ID(), 'featured', true) -- read post meta
get_post_type() -- post type slug
get_the_ID() -- current post ID
has_post_thumbnail() -- check if post has featured image
is_page('about') -- check if current page is "about"
Example usage:
Overview
get_field('featured') -- read ACF field value
get_sub_field('discount') -- read subfield in repeater
get_row() -- number of repeater rows
get_field_object('product_info')['value'] -- field object value
Example usage:
get_field('featured') == true && get_sub_field('discount') > 0
WooCommerce Functions
Overview
wc_get_cart_contents_count() -- number of items in cart
wc_get_cart_total() -- cart total
wc_get_cart_subtotal() -- cart subtotal
wc_cart_is_empty() -- TRUE if cart is empty
wc_customer_get_id() -- current customer ID
wc_customer_get_billing_email() -- customer billing email
wc_customer_get_shipping_country() -- shipping country
wc_customer_get_shipping_state() -- shipping state
wc_customer_get_shipping_postcode() -- shipping postcode
wc_get_product($product_id) -- get WC_Product object
Example usage:
wc_get_cart_contents_count() > 0 && wc_get_cart_total() > 50
PHP Helpers
Overview
strpos($haystack, $needle)
in_array($needle, $array)
empty($var)
isset($var)
count($array)
strlen($string)
preg_match($pattern, $subject)
current_time('timestamp')
strtotime($string)
date($format, $timestamp)
time()
number_format($number, $decimals)
round($number)
Example usage:
count(WC()->cart->get_cart()) > 1 && time() > strtotime('2026-01-01')
Extending the list of allowed functions
Block Logic provides four filters that developers can use to safely extend which functions, globals, and superglobals are available inside block logic expressions.
Add custom functions
Use the block_logic_allowed_functions filter to make additional functions available in block logic expressions.
Example
add_filter('block_logic_allowed_functions', function($allowed) {
$allowed[] = 'my_cart_has_items';
return $allowed;
});
function my_cart_has_items() {
return WC()->cart && WC()->cart->get_cart_contents_count() > 0;
}
Usage in a block logic field:
my_cart_has_items()
Add extra superglobals
Use the block_logic_allowed_superglobals filter to allow additional superglobals like $_SESSION.
Example:
add_filter('block_logic_allowed_superglobals', function($allowed) {
$allowed[] = '_SESSION';
return $allowed;
});
Usage in a block logic field:
!empty($_SESSION['special_offer'])
Add extra WordPress globals
Use the block_logic_allowed_globals filter to allow extra global variables.
Example:
add_filter('block_logic_allowed_globals', function($allowed) {
$allowed[] = 'my_global_data';
return $allowed;
});
// Somewhere in your theme or plugin
$GLOBALS['my_global_data'] = ['foo' => 'bar'];
Usage in a block logic field:
$post->ID == my_global_data['foo']
Add completely custom globals
Use the block_logic_extra_globals filter to allow any additional global variable in block logic expressions.
Example:
add_filter('block_logic_extra_globals', function($allowed) {
$allowed[] = 'my_custom_flag';
return $allowed;
});
// Initialize the global somewhere
$GLOBALS['my_custom_flag'] = true;
Usage in a block logic field:
$my_custom_flag && is_user_logged_in()