=== Block Logic - Full Block Display Control === Contributors: landwire Tags: conditional, logic, visibility, block, conditions Requires at least: 6.5 Tested up to: 6.9 Stable tag: 2.0.0 Requires PHP: 5.6 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html Block Logic adds a "Block Logic" field to the block editor, that lets you show or hide any block based on conditions. == Description == Block Logic adds a "Block Logic" field to the "Advanced" section of the block editor (i.e Gutenberg), that lets you show or hide any block based on conditions. You can use WordPress' [Conditional Tags](http://codex.wordpress.org/Conditional_Tags) or any general PHP code. = Show or hide blocks based on = * User role * User login status * Post status * Date and time * The result of a custom PHP function = Features = * Show or hide any block using conditions * Combine conditions with “and” or “or” operators. See FAQ Writing Logic Code * Full flexibility: use any condition you want = Limitations = Does not work with the Classic Block, Widget Block or Widget Area Block ['core/freeform', 'core/legacy-widget', 'core/widget-area'], as the those blocks do not support block attributes. Does also not work with the HTML Block ['core/html'] inside the Widget Screen, as this one also does not support block attributes there. = Configuration = Just activate the plugin. The "Block Logic" textbox will then appear in the "Advanced" section of the Gutenberg editor. == Frequently Asked Questions == = Writing Logic Code = Make good use of [WP's own conditional tags](http://codex.wordpress.org/Conditional_Tags). You can vary and combine code using: * `!` (not) to **reverse** the logic, eg `!is_home()` is TRUE when this is NOT the home page. * `||` (or) to **combine** conditions. `X OR Y` is TRUE when either X is true or Y is true. * `&&` (and) to make conditions **more specific**. `X AND Y` is TRUE when both X is true and Y is true. * `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 category with this slug * `current_user_can('level_10')` -- admin only blocks * `strpos($_SERVER['HTTP_REFERER'], "google.com")!=false` -- blocks to show when clicked through from a google search * `is_category() && in_array($cat, get_term_children( 5, 'category'))` -- category page that's a descendent of category 5 * `return (in_array(77,get_post_ancestors($post)));` -- WP page that is a child of page 77 * `return (is_page('home') || ($post->post_parent=="13"));` -- home page OR the page that's a child of page 13 Note the extra ';' on the end where there is an explicit 'return'. $post is available in the eval'd code. = Breaking changes = Since version 2.0.0 the code does not get eval'd directly, but there is a whitelist of allowed functions. It is planned to let people add to this whitelist via a filter. == Screenshots == 1. The 'Block logic' field at work in the block editor. == Changelog == = 2.0.0 = * totally reworked and removed all directly evalled code = 1.0.8 = * recompiled assets to remove console.log = 1.0.7 = * added logic indicator to mark blocks that have logic applied = 1.0.6 = * added check for Classic Block, Widget Block or Widget Area Block ['core/freeform', 'core/legacy-widget', 'core/widget-area'], as those do not support block attributes * added limitations to plugin description * updated dev dependencies = 1.0.5 = * added check for Classic Block and disabled display of settings there = 1.0.0 = * Initial Release of the plugin == Upgrade Notice == Nothing to consider.