文件操作 - conditions.php
返回文件管理
返回主菜单
删除本文件
文件: /storage/v12552/stanleysteamer/public_html/wp-content/themes/bricks/includes/conditions.php
编辑文件内容
<?php namespace Bricks; if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly class Conditions { public static $groups = []; public static $options = []; public function __construct() { // Init conditions after WP is loaded add_action( 'wp_loaded', [ $this, 'init' ] ); } public function init() { $this->set_groups(); $this->set_options(); } /** * Set condition groups * * @return void * * @since 1.8.4 */ public function set_groups() { $groups = []; $groups[] = [ 'name' => 'post', 'label' => esc_html__( 'Post', 'bricks' ), ]; $groups[] = [ 'name' => 'user', 'label' => esc_html__( 'User', 'bricks' ), ]; $groups[] = [ 'name' => 'date', 'label' => esc_html__( 'Date & time', 'bricks' ), ]; if ( \Bricks\Woocommerce::is_woocommerce_active() ) { $groups[] = [ 'name' => 'woocommerce', 'label' => 'WooCommerce', ]; } $groups[] = [ 'name' => 'other', 'label' => esc_html__( 'Other', 'bricks' ), ]; // Filter: Add groups $groups = apply_filters( 'bricks/conditions/groups', $groups ); self::$groups = $groups; } /** * Set condition options * * @return void * * @since 1.8.4 */ public function set_options() { /** * Return: No need to get condition controls if not in builder * * Results in better performance as we no longer query get_users, etc. * * @since 1.11.1 */ if ( ! bricks_is_builder() ) { return; } // OPTIONS $math_options = [ '==' => '==', '!=' => '!=', '>=' => '>=', '<=' => '<=', '>' => '>', '<' => '<', ]; $is_not_options = [ '==' => esc_html__( 'is', 'bricks' ), '!=' => esc_html__( 'is not', 'bricks' ), ]; // post_author: 'id' => 'display_name' of all users with 'edit_posts' capability $authors = get_users( [ 'fields' => [ 'ID', 'display_name' ], 'orderby' => 'display_name', 'capability' => 'edit_posts', // @since 1.11.1 ] ); // Get product categories and tags for WooCommerce conditions (@since 1.11.1) if ( \Bricks\Woocommerce::is_woocommerce_active() ) { // Category options $product_categories = get_terms( [ 'taxonomy' => 'product_cat', 'hide_empty' => false, ] ); $product_category_options = []; foreach ( $product_categories as $category ) { $product_category_options[ $category->term_id ] = $category->name; } // Tag options $product_tags = get_terms( [ 'taxonomy' => 'product_tag', 'hide_empty' => false, ] ); $product_tag_options = []; foreach ( $product_tags as $tag ) { $product_tag_options[ $tag->term_id ] = $tag->name; } } // Author options $author_options = []; foreach ( $authors as $author ) { $author_options[ $author->ID ] = $author->display_name; } $options = []; // POST $options[] = [ 'key' => 'post_id', 'group' => 'post', 'label' => esc_html__( 'Post ID', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $math_options, 'placeholder' => '==', ], 'value' => [ 'type' => 'text', ], ]; $options[] = [ 'key' => 'post_title', 'group' => 'post', 'label' => esc_html__( 'Post title', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => [ '==' => esc_html__( 'is', 'bricks' ), '!=' => esc_html__( 'is not', 'bricks' ), 'contains' => esc_html__( 'contains', 'bricks' ), 'contains_not' => esc_html__( 'does not contain', 'bricks' ), ], 'placeholder' => esc_html__( 'is', 'bricks' ), ], 'value' => [ 'type' => 'text', ], ]; $options[] = [ 'key' => 'post_parent', 'group' => 'post', 'label' => esc_html__( 'Post parent', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $math_options, 'placeholder' => '==', ], 'value' => [ 'type' => 'text', 'placeholder' => 0, ], ]; $options[] = [ 'key' => 'post_status', 'group' => 'post', 'label' => esc_html__( 'Post status', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'is', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => get_post_statuses(), 'multiple' => true, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; $options[] = [ 'key' => 'post_author', 'group' => 'post', 'label' => esc_html__( 'Post author', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, ], 'value' => [ 'type' => 'select', 'options' => $author_options, ], ]; $options[] = [ 'key' => 'post_date', 'group' => 'post', 'label' => esc_html__( 'Post date', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $math_options, 'placeholder' => '==', ], 'value' => [ 'type' => 'datepicker', 'enableTime' => false, ], ]; // set OR not set $options[] = [ 'key' => 'featured_image', 'group' => 'post', 'label' => esc_html__( 'Featured image', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'Select', 'bricks' ), // 'required' => ['key', '!=', 'featured_image'], ], 'value' => [ 'type' => 'select', 'options' => [ '1' => esc_html__( 'set', 'bricks' ), '0' => esc_html__( 'not set', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // USER $options[] = [ 'key' => 'user_logged_in', 'group' => 'user', 'label' => esc_html__( 'User login', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'is', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => [ 1 => esc_html__( 'Logged in', 'bricks' ), 0 => esc_html__( 'Logged out', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; $options[] = [ 'key' => 'user_id', 'group' => 'user', 'label' => esc_html__( 'User ID', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $math_options, 'placeholder' => '==', ], 'value' => [ 'type' => 'text', 'placeholder' => '', ], ]; $options[] = [ 'key' => 'user_registered', 'group' => 'user', 'label' => esc_html__( 'User registered', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => [ '<' => esc_html__( 'after', 'bricks' ), '>' => esc_html__( 'before', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], 'value' => [ 'type' => 'datepicker', 'enableTime' => false, 'placeholder' => date( 'Y-m-d' ), ], ]; $options[] = [ 'key' => 'user_role', 'group' => 'user', 'label' => esc_html__( 'User role', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, ], 'value' => [ 'type' => 'select', 'options' => wp_roles()->get_names(), 'multiple' => true, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // DATE $options[] = [ 'key' => 'weekday', 'group' => 'date', 'label' => esc_html__( 'Weekday', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $math_options, 'placeholder' => '==', ], 'value' => [ 'type' => 'select', 'options' => [ 1 => esc_html__( 'Monday', 'bricks' ), 2 => esc_html__( 'Tuesday', 'bricks' ), 3 => esc_html__( 'Wednesday', 'bricks' ), 4 => esc_html__( 'Thursday', 'bricks' ), 5 => esc_html__( 'Friday', 'bricks' ), 6 => esc_html__( 'Saturday', 'bricks' ), 7 => esc_html__( 'Sunday', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; /** * Note about WP time zone being used * * Example: Timezone: UTC+2:00 * * @since 1.9.3 */ $timezone_description = esc_html__( 'Timezone', 'bricks' ) . ': UTC' . wp_timezone_string() . ' (<a href="' . admin_url( 'options-general.php' ) . '" target="_blank">' . esc_html__( 'Edit', 'bricks' ) . '</a>)'; $options[] = [ 'key' => 'date', 'group' => 'date', 'label' => esc_html__( 'Date', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $math_options, 'placeholder' => '==', ], 'value' => [ 'type' => 'datepicker', 'enableTime' => false, 'placeholder' => date( 'Y-m-d', current_time( 'timestamp' ) ), 'description' => $timezone_description, ], ]; $options[] = [ 'key' => 'time', 'group' => 'date', 'label' => esc_html__( 'Time', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $math_options, 'placeholder' => '==', ], 'value' => [ 'type' => 'text', 'placeholder' => date( 'H:i a', current_time( 'timestamp' ) ), 'description' => $timezone_description, ], ]; $options[] = [ 'key' => 'datetime', 'group' => 'date', 'label' => esc_html__( 'Datetime', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $math_options, 'placeholder' => '==', ], 'value' => [ 'type' => 'datepicker', 'enableTime' => true, 'placeholder' => date( 'Y-m-d h:i a', current_time( 'timestamp' ) ), 'description' => $timezone_description, ], ]; // WOOCOMMERCE (@since 1.11.1) if ( \Bricks\Woocommerce::is_woocommerce_active() ) { // Product price $options[] = [ 'key' => 'woo_product_type', 'group' => 'woocommerce', 'label' => esc_html__( 'Product type', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, ], 'value' => [ 'type' => 'select', 'options' => [ 'simple' => esc_html__( 'Simple', 'bricks' ), 'grouped' => esc_html__( 'Grouped', 'bricks' ), 'external' => esc_html__( 'External', 'bricks' ) . '/' . esc_html__( 'Affiliate', 'bricks' ), 'variable' => esc_html__( 'Variable', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // Product on sale $options[] = [ 'key' => 'woo_product_sale', 'group' => 'woocommerce', 'label' => esc_html__( 'Product sale status', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => [ '1' => esc_html__( 'On sale', 'bricks' ), '0' => esc_html__( 'Not on sale', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // Product is new $options[] = [ 'key' => 'woo_product_new', 'group' => 'woocommerce', 'label' => esc_html__( 'Product new status', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => [ '1' => esc_html__( 'New', 'bricks' ), '0' => esc_html__( 'Not new', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // Product stock status $options[] = [ 'key' => 'woo_product_stock_status', 'group' => 'woocommerce', 'label' => esc_html__( 'Product stock status', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => [ 'instock' => esc_html__( 'In stock', 'bricks' ), 'outofstock' => esc_html__( 'Out of stock', 'bricks' ), 'onbackorder' => esc_html__( 'On backorder', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // Product stock quantity $options[] = [ 'key' => 'woo_product_stock_quantity', 'group' => 'woocommerce', 'label' => esc_html__( 'Product stock quantity', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $math_options, 'placeholder' => '==', ], 'value' => [ 'type' => 'text', 'placeholder' => '', ], ]; // Product stock management $options[] = [ 'key' => 'woo_product_stock_management', 'group' => 'woocommerce', 'label' => esc_html__( 'Product stock management', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => [ '1' => esc_html__( 'Enabled', 'bricks' ), '0' => esc_html__( 'Disabled', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // Product is sold individually $options[] = [ 'key' => 'woo_product_sold_individually', 'group' => 'woocommerce', 'label' => esc_html__( 'Product sold individually', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => [ '1' => esc_html__( 'Enabled', 'bricks' ), '0' => esc_html__( 'Disabled', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // Product was purchased by current user $options[] = [ 'key' => 'woo_product_purchased_by_user', 'group' => 'woocommerce', 'label' => esc_html__( 'Product purchased by user', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => [ '1' => esc_html__( 'True', 'bricks' ), '0' => esc_html__( 'False', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // Product is featured $options[] = [ 'key' => 'woo_product_featured', 'group' => 'woocommerce', 'label' => esc_html__( 'Product featured', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => [ '1' => esc_html__( 'True', 'bricks' ), '0' => esc_html__( 'False', 'bricks' ), ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // Product rating $options[] = [ 'key' => 'woo_product_rating', 'group' => 'woocommerce', 'label' => esc_html__( 'Product rating', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $math_options, 'placeholder' => '==', ], 'value' => [ 'type' => 'text', 'placeholder' => '', ], ]; // Product category $options[] = [ 'key' => 'woo_product_category', 'group' => 'woocommerce', 'label' => esc_html__( 'Product category', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => $product_category_options, 'multiple' => true, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // Product tag $options[] = [ 'key' => 'woo_product_tag', 'group' => 'woocommerce', 'label' => esc_html__( 'Product tag', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => $product_tag_options, 'multiple' => true, 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; } // OTHER $options[] = [ 'key' => 'dynamic_data', 'group' => 'other', 'label' => esc_html__( 'Dynamic data', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => array_merge( [ 'contains' => esc_html__( 'contains', 'bricks' ), 'contains_not' => esc_html__( 'does not contain', 'bricks' ), 'empty' => esc_html__( 'is empty', 'bricks' ), // @since 1.10 'empty_not' => esc_html__( 'is not empty', 'bricks' ), // @since 1.10 ], $math_options ), 'placeholder' => '==', ], 'value' => [ 'type' => 'text', ], ]; $options[] = [ 'key' => 'browser', 'group' => 'other', 'label' => esc_html__( 'Browser', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'is', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => [ 'chrome' => 'Chrome', 'firefox' => 'Firefox', 'safari' => 'Safari', 'edge' => 'Edge', 'opera' => 'Opera', 'msie' => 'Internet Explorer' ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; $options[] = [ 'key' => 'operating_system', 'group' => 'other', 'label' => esc_html__( 'Operating system', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => $is_not_options, 'placeholder' => esc_html__( 'is', 'bricks' ), ], 'value' => [ 'type' => 'select', 'options' => [ 'windows' => 'Windows', 'mac' => 'macOS', 'linux' => 'Linux', 'ubuntu' => 'Ubuntu', 'iphone' => 'iPhone', 'ipad' => 'iPad', 'ipod' => 'iPod', 'android' => 'Android', 'blackberry' => 'Blackberry', 'webos' => 'Mobile (webOS)', ], 'placeholder' => esc_html__( 'Select', 'bricks' ), ], ]; // Current URL incl. params $options[] = [ 'key' => 'current_url', 'group' => 'other', 'label' => esc_html__( 'Current URL', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => [ '==' => esc_html__( 'is', 'bricks' ), '!=' => esc_html__( 'is not', 'bricks' ), 'contains' => esc_html__( 'contains', 'bricks' ), 'contains_not' => esc_html__( 'does not contain', 'bricks' ), ], 'placeholder' => esc_html__( 'is', 'bricks' ), ], 'value' => [ 'type' => 'text', ], ]; $options[] = [ 'key' => 'referer', 'group' => 'other', 'label' => esc_html__( 'Referrer URL', 'bricks' ), 'compare' => [ 'type' => 'select', 'options' => [ '==' => esc_html__( 'is', 'bricks' ), '!=' => esc_html__( 'is not', 'bricks' ), 'contains' => esc_html__( 'contains', 'bricks' ), 'contains_not' => esc_html__( 'does not contain', 'bricks' ), ], 'placeholder' => esc_html__( 'is', 'bricks' ), ], 'value' => [ 'type' => 'text', ], ]; // Filter: Add options $options = apply_filters( 'bricks/conditions/options', $options ); self::$options = $options; } /** * Return all controls (builder) * * @return array */ public static function get_controls_data() { // Return: Prevent querying database outside of builder for condition controls if ( ! bricks_is_builder() ) { return; } // STEP: Populate controls for builder $controls = []; // Loop over groups foreach ( self::$groups as $group ) { // Skip if $group has no name or label if ( ! isset( $group['name'] ) || empty( $group['name'] ) || ! isset( $group['label'] ) || empty( $group['label'] ) ) { continue; } // Add group title - backwards compatibility. e.g. $controls['postGroupTitle'] $controls[ $group['name'] . 'GroupTitle' ] = [ 'label' => $group['label'], ]; // Use array_filter to get controls for current group and must have a key $group_controls = array_filter( self::$options, function( $option ) use ( $group ) { return $option['group'] === $group['name'] && ! empty( $option['key'] ); } ); // Add controls for current group foreach ( $group_controls as $control ) { $controls[ $control['key'] ] = $control; } } return $controls; } /** * Transform dynamic data tag * * Add ':value' to ACF true_false tag to get unlocalized value. * * @since 1.9.9 */ public static function maybe_transform_dynamic_tag( $dynamic_tag ) { // Return: Not a string if ( ! is_string( $dynamic_tag ) ) { return $dynamic_tag; } // Add ':value' filter to ACF true_false tag to avoid localisation (in element conditions) if ( strpos( $dynamic_tag, '{acf_' ) === 0 && strpos( $dynamic_tag, ':value}' ) === false && $dynamic_tag !== '{acf_get_row_layout}' ) { // ACF: Get field type from dynamic data tag $acf_provider = Integrations\Dynamic_Data\Providers::get_registered_provider( 'acf' ); if ( $acf_provider ) { $tags = $acf_provider->get_tags(); $my_key = str_replace( [ '{','}' ], '', $dynamic_tag ); $field_type = $tags[ $my_key ]['field']['type'] ?? false; // Add ':value' to true_false DD tag to get unlocalized value if ( $field_type === 'true_false' ) { $dynamic_tag = str_replace( '}', ':value}', $dynamic_tag ); } } } return $dynamic_tag; } /** * Convert boolean-like strings to actual booleans for proper true/false comparisions * * @since 1.7 */ public static function boolean_converter( &$value, &$required ) { $possible_boolean = [ 'True', 'False', 'true', 'false', true, false, '1', '0', '' ]; if ( in_array( $required, $possible_boolean, true ) && in_array( $value, $possible_boolean, true ) ) { $required = filter_var( $required, FILTER_VALIDATE_BOOLEAN ); $value = filter_var( $value, FILTER_VALIDATE_BOOLEAN ); } } /** * Get current URL for conditions. * * @return string * * @since 2.3.8 */ public static function get_current_url() { global $wp; // Retrieve all GET query parameters and sanitize them $get_query_params = isset( $_GET ) ? wp_unslash( $_GET ) : []; $value = home_url( add_query_arg( $get_query_params, $wp->request ? trailingslashit( $wp->request ) : '' ) ); // AJAX requests do not include the original browser URL/query string. (#86c21d4m0; @since 2.3.8) if ( ! empty( Api::$request_data['baseUrl'] ) ) { $url_params = []; if ( ! empty( Api::$request_data['urlParams'] ) && is_array( Api::$request_data['urlParams'] ) ) { $url_params = Api::$request_data['urlParams']; } $value = add_query_arg( $url_params, Api::$request_data['baseUrl'] ); } return esc_url_raw( $value ); } /** * Check element conditions * * At least one condition set must be fulfilled for the element to be rendered. * * Inside a condition all items must evaluate to true. * * @return boolean true = render element | false = don't render element * * @since 1.5.4 */ public static function check( $conditions, $instance, $force_run = false ) { /** * Return: Always render element in builder dynamic area * * @since 2.0: Add check that request if not coming from a static area. * * @since 2.2: Add $force_run to allow condition checks when generating element CSS */ if ( ! isset( $_POST['staticArea'] ) && ( bricks_is_builder() || bricks_is_builder_call() ) && ! $force_run ) { return true; } $user_agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : null; $post_id = $instance->post_id; $post = get_post( $post_id ); $user = wp_get_current_user(); $render_element = false; $product = \Bricks\Woocommerce::is_woocommerce_active() ? wc_get_product( $post_id ) : false; // Loop over condition sets (logic between sets: OR) foreach ( $conditions as $condition_set ) { $render_set = true; // Loop over conditions inside a set (logic inside a set: AND) foreach ( $condition_set as $condition ) { // Skip further checks in condition set if we already have a false condition inside this set if ( $render_set === false ) { continue; } $key = isset( $condition['key'] ) ? $condition['key'] : false; $compare = isset( $condition['compare'] ) ? $condition['compare'] : '=='; // NOTE: Might need to use maybe_transform_dynamic_tag() here (@since 1.9.9) $required = isset( $condition['value'] ) ? $instance->render_dynamic_data( $condition['value'] ) : false; $value = false; // STEP: Get current value switch ( $key ) { // POST case 'post_id': $value = $post_id; break; case 'post_title': $value = $post->post_title ?? ''; break; case 'post_parent': $value = $post->post_parent ?? 0; break; case 'post_status': $value = $post->post_status ?? ''; break; case 'post_author': $value = $post->post_author ?? 0; break; case 'post_date': $value = isset( $post->post_date ) ? date( 'Y-m-d', strtotime( $post->post_date ) ) : false; // 2022-12-31 break; case 'featured_image': $value = has_post_thumbnail( $post_id ); break; // USER case 'user_logged_in': $value = is_user_logged_in(); break; case 'user_id': $value = is_a( $user, 'WP_User' ) ? $user->ID : 0; break; case 'user_registered': $value = date( 'Y-m-d', strtotime( $user->user_registered ) ); if ( ! $required ) { $required = date( 'Y-m-d' ); } break; case 'user_role': $value = is_a( $user, 'WP_User' ) ? $user->roles : []; break; // DATE case 'weekday': $value = date( 'N' ); // 1 = monday, 2 = tuesday, etc. break; // DATE, TIME, DATETIME case 'date': case 'time': case 'datetime': // Use website current time $value = current_time( 'timestamp' ); if ( $required ) { // Convert user input to timestamp for comparison $required = strtotime( $required ); } else { // No user input, use current time $required = $value; } if ( $key === 'date' ) { // Just get the date part and compare $value = date( 'Y-m-d', $value ); $required = date( 'Y-m-d', $required ); } elseif ( $key === 'time' ) { // Just get the time part and compare $value = date( 'H:i', $value ); $required = date( 'H:i', $required ); } break; // WOOCOMMERCE case 'woo_product_type': $value = $product ? $product->get_type() : ''; break; case 'woo_product_sale': $value = $product ? $product->is_on_sale() : 0; break; case 'woo_product_stock_status': $value = $product ? $product->get_stock_status() : ''; break; case 'woo_product_stock_quantity': $value = $product ? $product->get_stock_quantity() : 0; break; case 'woo_product_stock_management': $value = $product ? $product->managing_stock() : 0; break; case 'woo_product_sold_individually': $value = $product ? $product->is_sold_individually() : 0; break; case 'woo_product_purchased_by_user': $value = $product ? wc_customer_bought_product( $user->user_email, $user->ID, $product->get_id() ) : 0; break; case 'woo_product_featured': $value = $product ? $product->is_featured() : 0; break; case 'woo_product_new': $newness_in_days = Database::get_setting( 'woocommerceBadgeNew', false ); $value = 0; if ( $newness_in_days ) { $newness_timestamp = time() - ( 60 * 60 * 24 * $newness_in_days ); $created = $product ? strtotime( $product->get_date_created() ) : 0; $value = $newness_timestamp < $created; } break; case 'woo_product_category': $value = $product ? $product->get_category_ids() : []; break; case 'woo_product_tag': $value = $product ? $product->get_tag_ids() : []; break; case 'woo_product_rating': $value = $product ? $product->get_average_rating() : 0; break; // OTHER case 'dynamic_data': $dynamic_data_tag = $condition['dynamic_data'] ?? false; if ( $dynamic_data_tag ) { // Transform dynamic data tag - Add ':value' to ACF true_false tag to get unlocalized value $dynamic_data_tag = self::maybe_transform_dynamic_tag( $dynamic_data_tag ); // Render dynamic data and assign to value $value = $instance->render_dynamic_data( $dynamic_data_tag ); } // Re-evaluate value field again because user might use the condition in value field $condition_value = $condition['value'] ?? false; if ( $condition_value ) { // Transform dynamic data tag: Add ':value' filter to ACF true_false tag to get unlocalized value $condition_value = self::maybe_transform_dynamic_tag( $condition_value ); // Render dynamic data and assign to required $required = $instance->render_dynamic_data( $condition_value ); } break; case 'browser': // Logic moved to Helpers::user_agent_to_browser() $value = Helpers::user_agent_to_browser( $user_agent ); break; case 'operating_system': // Logic moved to Helpers::user_agent_to_os() $value = Helpers::user_agent_to_os( $user_agent ); break; case 'referer': $value = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : ''; break; case 'current_url': $value = self::get_current_url(); break; } // COMPARISON OPERANDS switch ( $compare ) { case '==': // Convert boolean-like strings to actual booleans (@since 1.10) self::boolean_converter( $value, $required ); // user_role (one of the user roles must be in requested roles array) if ( is_array( $value ) && is_array( $required ) ) { $render_set = count( array_intersect( $value, $required ) ) > 0; } // Handle array (e.g. post_status) and string value elseif ( is_array( $required ) ) { $render_set = in_array( $value, $required ); } else { $render_set = $value == $required; } break; case '!=': // Convert boolean-like strings to actual booleans (@since 1.10) self::boolean_converter( $value, $required ); // User role (one of the user roles must be in requested roles array) (#862jj0afz) if ( is_array( $value ) && is_array( $required ) ) { $render_set = count( array_intersect( $value, $required ) ) == 0; } // Handle array (e.g. post_status) and string value elseif ( is_array( $required ) ) { $render_set = ! in_array( $value, $required ); } else { $render_set = $value != $required; } break; case '>=': $render_set = $value >= $required; break; case '<=': $render_set = $value <= $required; break; case '>': $render_set = $value > $required; break; case '<': $render_set = $value < $required; break; // post_title case 'contains': // Check if string contains keyword if ( $value && gettype( $value ) === 'string' && gettype( $required ) === 'string' ) { $render_set = strpos( $value, $required ) !== false; } else { $render_set = false; } break; // post_title case 'contains_not': // Check if string does not contain keyword if ( $value && gettype( $value ) === 'string' && gettype( $required ) === 'string' ) { $render_set = strpos( $value, $required ) === false; } else { $render_set = false; } break; // dynamic_data (@since 1.10) case 'empty': $render_set = (string) $value === ''; break; // dynamic_data (@since 1.10) case 'empty_not': $render_set = (string) $value !== ''; break; } /** * Allow third party plugins to modify the boolean value of a condition * * @since 1.8.4 */ $render_set = apply_filters( 'bricks/conditions/result', $render_set, $key, $condition ); } // All items inside condition are fulfilled: Render element if ( $render_set ) { $render_element = true; } } return $render_element; } }
修改文件时间
将文件时间修改为当前时间的前一年
删除文件