=== Block Logic - Full Block Display Control === Contributors: landwire Tags: conditional, logic, visibility, block, conditions Requires at least: 5.0 Tested up to: 6.8 Stable tag: 1.1.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. = With great power comes great responsibility = The block logic you introduce is EVAL'd directly. Anyone who has access to use the Gutenberg Editor and has admin rights will have the right to add any code, including malicious and possibly destructive functions. There is an optional filter 'block_logic_eval_override' which you can use to bypass the EVAL with your own code if needed. * I'm getting "PHP Parse error… … eval()'d code on line 1" You have a PHP syntax error in one of your block's "Block Logic" fields. Review them for errors. == Screenshots == 1. The 'Block logic' field at work in the block editor. == Changelog == = 1.1.0 = * added security checks to prevent malicious code from being eval'd for any role but admin * added filtering of dangerous functions, superglobals, objects, new classes etc * store logic code in the postmeta of the block * added backwards compatibility script to migrate existing logic code (only for admins) * removed "block_logic_eval_override" filter = 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.