2025-08-27 08:44:30 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Blocksy;
|
|
|
|
|
|
|
|
|
|
class ConditionsRulesResolver {
|
|
|
|
|
private $rule = [];
|
|
|
|
|
|
|
|
|
|
// prefix | current-screen
|
|
|
|
|
private $strategy_or_prefix = 'current-screen';
|
|
|
|
|
|
|
|
|
|
private $conditions_purpose = 'global';
|
|
|
|
|
|
|
|
|
|
public function __construct($rule, $args = []) {
|
|
|
|
|
$args = wp_parse_args($args, [
|
|
|
|
|
// prefix | current-screen
|
|
|
|
|
'strategy' => 'current-screen',
|
|
|
|
|
|
|
|
|
|
// global | archive-loop
|
|
|
|
|
'conditions_purpose' => 'global'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$this->rule = $rule;
|
|
|
|
|
$this->strategy_or_prefix = $args['strategy'];
|
|
|
|
|
$this->conditions_purpose = $args['conditions_purpose'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function resolve() {
|
|
|
|
|
if ($this->strategy_or_prefix === 'current-screen') {
|
|
|
|
|
return $this->resolve_single_condition($this->rule);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this->resolve_single_condition_with_prefix(
|
|
|
|
|
$this->rule,
|
|
|
|
|
$this->strategy_or_prefix
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function resolve_single_condition($rule) {
|
|
|
|
|
if ($rule['rule'] === 'everywhere') {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'singulars') {
|
|
|
|
|
return is_singular();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'archives') {
|
|
|
|
|
return is_archive();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === '404') {
|
|
|
|
|
return is_404();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'search') {
|
|
|
|
|
return is_search();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'blog') {
|
|
|
|
|
return ! is_front_page() && is_home();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'front_page') {
|
|
|
|
|
return is_front_page();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'privacy_policy_page') {
|
|
|
|
|
$is_blocksy_page = blocksy_is_page();
|
|
|
|
|
|
|
|
|
|
if (is_singular() || $is_blocksy_page) {
|
|
|
|
|
$post_id = get_the_ID();
|
|
|
|
|
|
|
|
|
|
if ($is_blocksy_page) {
|
|
|
|
|
$post_id = $is_blocksy_page;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return intval($post_id) === intval(
|
|
|
|
|
get_option('wp_page_for_privacy_policy')
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'date') {
|
|
|
|
|
return is_date();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'author') {
|
|
|
|
|
if (
|
|
|
|
|
isset($rule['payload'])
|
|
|
|
|
&&
|
|
|
|
|
isset($rule['payload']['user_id'])
|
|
|
|
|
) {
|
|
|
|
|
return is_author($rule['payload']['user_id']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return is_author();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$rule['rule'] === 'request_referer'
|
|
|
|
|
&&
|
|
|
|
|
! empty($rule['payload']['referer'])
|
|
|
|
|
) {
|
|
|
|
|
return strpos(
|
|
|
|
|
wp_get_raw_referer(),
|
|
|
|
|
$rule['payload']['referer']
|
|
|
|
|
) !== false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$rule['rule'] === 'request_url'
|
|
|
|
|
&&
|
|
|
|
|
! empty($rule['payload']['url'])
|
|
|
|
|
) {
|
|
|
|
|
return strpos(
|
|
|
|
|
blocksy_current_url(),
|
|
|
|
|
$rule['payload']['url']
|
|
|
|
|
) !== false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$rule['rule'] === 'request_cookie'
|
|
|
|
|
&&
|
|
|
|
|
! empty($rule['payload']['cookie'])
|
|
|
|
|
) {
|
|
|
|
|
return (
|
|
|
|
|
isset($_COOKIE[$rule['payload']['cookie']])
|
|
|
|
|
&&
|
|
|
|
|
! empty($_COOKIE[$rule['payload']['cookie']])
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$rule['rule'] === 'start_end_date'
|
|
|
|
|
&&
|
|
|
|
|
! empty($rule['payload']['start'])
|
|
|
|
|
&&
|
|
|
|
|
! empty($rule['payload']['end'])
|
|
|
|
|
) {
|
|
|
|
|
$timezone = null;
|
|
|
|
|
|
|
|
|
|
if (function_exists('wp_timezone')) {
|
|
|
|
|
$timezone = wp_timezone();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$start = new \DateTime($rule['payload']['start'], $timezone);
|
|
|
|
|
$end = new \DateTime($rule['payload']['end'], $timezone);
|
|
|
|
|
|
|
|
|
|
$now = new \DateTime('now', $timezone);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
$start < $now
|
|
|
|
|
&&
|
|
|
|
|
$end > $now
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'schedule_date') {
|
|
|
|
|
$day_matches = true;
|
|
|
|
|
$time_matches = true;
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
isset($rule['payload'])
|
|
|
|
|
&&
|
|
|
|
|
isset($rule['payload']['days'])
|
|
|
|
|
) {
|
|
|
|
|
$days = $rule['payload']['days'];
|
|
|
|
|
|
|
|
|
|
if (! is_array($days)) {
|
|
|
|
|
$days = [
|
|
|
|
|
'monday' => true,
|
|
|
|
|
'tuesday' => true,
|
|
|
|
|
'wednesday' => true,
|
|
|
|
|
'thursday' => true,
|
|
|
|
|
'friday' => true,
|
|
|
|
|
'saturday' => true,
|
|
|
|
|
'sunday' => true
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-12 13:13:07 +01:00
|
|
|
$day = strtolower(gmdate('l'));
|
2025-08-27 08:44:30 +02:00
|
|
|
|
|
|
|
|
$day_matches = isset($days[$day]) && $days[$day];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
isset($rule['payload'])
|
|
|
|
|
&&
|
|
|
|
|
isset($rule['payload']['time_start'])
|
|
|
|
|
&&
|
|
|
|
|
isset($rule['payload']['time_end'])
|
|
|
|
|
) {
|
|
|
|
|
$current_time = current_datetime();
|
|
|
|
|
|
|
|
|
|
$start = current_datetime()->setTime(
|
|
|
|
|
explode(':', $rule['payload']['time_start'])[0],
|
|
|
|
|
explode(':', $rule['payload']['time_start'])[1]
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$end = current_datetime()->setTime(
|
|
|
|
|
explode(':', $rule['payload']['time_end'])[0],
|
|
|
|
|
explode(':', $rule['payload']['time_end'])[1]
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if ($current_time < $start || $current_time > $end) {
|
|
|
|
|
$time_matches = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $day_matches && $time_matches;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'woo_shop') {
|
|
|
|
|
return function_exists('is_shop') && is_shop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'single_post') {
|
|
|
|
|
return is_singular('post');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'all_post_archives') {
|
|
|
|
|
global $post;
|
|
|
|
|
global $wp_query;
|
|
|
|
|
|
|
|
|
|
return is_post_type_archive('post') || (
|
|
|
|
|
$wp_query->in_the_loop
|
|
|
|
|
&&
|
|
|
|
|
get_post_type($post) === 'post'
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'post_categories') {
|
|
|
|
|
return is_category();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'post_tags') {
|
|
|
|
|
return is_tag();
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-31 11:30:59 +02:00
|
|
|
if (strpos($rule['rule'], 'post_type_post_taxonomy_') !== false) {
|
|
|
|
|
return is_tax(str_replace(
|
|
|
|
|
'post_type_post_taxonomy_',
|
|
|
|
|
'',
|
|
|
|
|
$rule['rule']
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-27 08:44:30 +02:00
|
|
|
if ($rule['rule'] === 'single_page') {
|
|
|
|
|
return is_singular('page');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$rule['rule'] === 'single_product'
|
|
|
|
|
&&
|
2026-03-31 11:30:59 +02:00
|
|
|
blocksy_companion_theme_functions()->blocksy_manager()
|
2025-08-27 08:44:30 +02:00
|
|
|
) {
|
2026-03-31 11:30:59 +02:00
|
|
|
return blocksy_companion_theme_functions()->blocksy_manager()->screen->is_product();
|
2025-08-27 08:44:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'all_product_archives') {
|
|
|
|
|
if (function_exists('is_shop')) {
|
|
|
|
|
return (
|
|
|
|
|
is_shop()
|
|
|
|
|
||
|
|
|
|
|
is_product_tag()
|
|
|
|
|
||
|
|
|
|
|
is_product_category()
|
|
|
|
|
||
|
|
|
|
|
is_product_taxonomy()
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'all_product_categories') {
|
|
|
|
|
if (function_exists('is_shop')) {
|
|
|
|
|
return is_product_category();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'all_product_brands') {
|
|
|
|
|
if (function_exists('is_shop')) {
|
|
|
|
|
return is_tax('product_brand');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-31 11:30:59 +02:00
|
|
|
if (strpos($rule['rule'], 'post_type_product_taxonomy_') !== false) {
|
|
|
|
|
return is_tax(str_replace(
|
|
|
|
|
'post_type_product_taxonomy_',
|
|
|
|
|
'',
|
|
|
|
|
$rule['rule']
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-27 08:44:30 +02:00
|
|
|
if ($rule['rule'] === 'all_product_attributes') {
|
|
|
|
|
if (
|
|
|
|
|
function_exists('taxonomy_is_product_attribute')
|
|
|
|
|
&&
|
|
|
|
|
isset(get_queried_object()->taxonomy)
|
|
|
|
|
) {
|
|
|
|
|
$tax_name = get_queried_object()->taxonomy;
|
|
|
|
|
|
|
|
|
|
return taxonomy_is_product_attribute($tax_name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'all_product_tags') {
|
|
|
|
|
if (function_exists('is_shop')) {
|
|
|
|
|
return is_product_tag();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'user_logged_in') {
|
|
|
|
|
return is_user_logged_in();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'user_logged_out') {
|
|
|
|
|
return ! is_user_logged_in();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'user_post_author_id') {
|
|
|
|
|
global $post;
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$post
|
|
|
|
|
&&
|
|
|
|
|
$post->post_author
|
|
|
|
|
&&
|
|
|
|
|
isset($rule['payload'])
|
|
|
|
|
&&
|
|
|
|
|
isset($rule['payload']['user_id'])
|
|
|
|
|
) {
|
|
|
|
|
$user_id = $rule['payload']['user_id'];
|
|
|
|
|
$post_author = intval($post->post_author);
|
|
|
|
|
|
|
|
|
|
if ($user_id === 'current_user') {
|
|
|
|
|
return $post_author === intval(get_current_user_id());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return intval($user_id) === $post_author;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (strpos($rule['rule'], 'user_role_') !== false) {
|
|
|
|
|
if (! is_user_logged_in()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return in_array(
|
|
|
|
|
str_replace('user_role_', '', $rule['rule']),
|
|
|
|
|
get_userdata(wp_get_current_user()->ID)->roles
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (strpos($rule['rule'], 'post_type_single_') !== false) {
|
|
|
|
|
return is_singular(str_replace(
|
|
|
|
|
'post_type_single_',
|
|
|
|
|
'',
|
|
|
|
|
$rule['rule']
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (strpos($rule['rule'], 'post_type_archive_') !== false) {
|
|
|
|
|
global $post;
|
|
|
|
|
global $wp_query;
|
|
|
|
|
|
|
|
|
|
$custom_post_type = str_replace(
|
|
|
|
|
'post_type_archive_',
|
|
|
|
|
'',
|
|
|
|
|
$rule['rule']
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (is_post_type_archive($custom_post_type)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
! $wp_query->in_the_loop
|
|
|
|
|
||
|
|
|
|
|
get_post_type($post) !== $custom_post_type
|
|
|
|
|
) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-31 11:30:59 +02:00
|
|
|
if (! blocksy_companion_theme_functions()->blocksy_manager()) {
|
2025-08-27 08:44:30 +02:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-31 11:30:59 +02:00
|
|
|
$manager = blocksy_companion_theme_functions()->blocksy_manager();
|
2025-08-27 08:44:30 +02:00
|
|
|
|
|
|
|
|
if (! isset($manager->archive) || ! $manager->archive) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $manager->archive->is_doing_card_output();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (strpos($rule['rule'], 'post_type_taxonomy_') !== false) {
|
|
|
|
|
return is_tax(str_replace(
|
|
|
|
|
'post_type_taxonomy_',
|
|
|
|
|
'',
|
|
|
|
|
$rule['rule']
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$rule['rule'] === 'post_ids'
|
|
|
|
|
||
|
|
|
|
|
$rule['rule'] === 'page_ids'
|
|
|
|
|
||
|
|
|
|
|
$rule['rule'] === 'product_ids'
|
|
|
|
|
||
|
|
|
|
|
$rule['rule'] === 'custom_post_type_ids'
|
|
|
|
|
) {
|
|
|
|
|
if (function_exists('blocksy_is_page')) {
|
|
|
|
|
$is_blocksy_page = blocksy_is_page();
|
|
|
|
|
|
|
|
|
|
if (is_singular() || $is_blocksy_page) {
|
|
|
|
|
$post_id = get_the_ID();
|
|
|
|
|
|
|
|
|
|
if ($is_blocksy_page) {
|
|
|
|
|
$post_id = $is_blocksy_page;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
global $post;
|
|
|
|
|
|
|
|
|
|
if (intval($post_id) === 0 && isset($post->post_name)) {
|
|
|
|
|
$maybe_post = get_page_by_path($post->post_name);
|
|
|
|
|
|
|
|
|
|
if ($maybe_post) {
|
|
|
|
|
$post_id = $maybe_post->ID;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
isset($rule['payload'])
|
|
|
|
|
&&
|
|
|
|
|
isset($rule['payload']['post_id'])
|
|
|
|
|
&&
|
|
|
|
|
$post_id
|
|
|
|
|
&&
|
|
|
|
|
intval($post_id) === intval($rule['payload']['post_id'])
|
|
|
|
|
) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$rule['rule'] === 'current_language'
|
|
|
|
|
&&
|
|
|
|
|
function_exists('blocksy_get_current_language')
|
|
|
|
|
&&
|
|
|
|
|
! empty($rule['payload']['language'])
|
|
|
|
|
) {
|
|
|
|
|
return $rule['payload']['language'] === blocksy_get_current_language();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$rule['rule'] === 'bbpress_profile'
|
|
|
|
|
&&
|
|
|
|
|
function_exists('bbp_is_single_user_profile')
|
|
|
|
|
) {
|
|
|
|
|
return bbp_is_single_user_profile();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$rule['rule'] === 'taxonomy_ids'
|
|
|
|
|
||
|
|
|
|
|
$rule['rule'] === 'product_taxonomy_ids'
|
|
|
|
|
) {
|
|
|
|
|
if (is_tax() || is_category() || is_tag()) {
|
|
|
|
|
$tax_id = get_queried_object_id();
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
isset($rule['payload'])
|
|
|
|
|
&&
|
|
|
|
|
isset($rule['payload']['taxonomy_id'])
|
|
|
|
|
&&
|
|
|
|
|
$tax_id
|
|
|
|
|
&&
|
|
|
|
|
intval($tax_id) === intval($rule['payload']['taxonomy_id'])
|
|
|
|
|
) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$rule['rule'] === 'post_with_taxonomy_ids'
|
|
|
|
|
||
|
|
|
|
|
$rule['rule'] === 'product_with_taxonomy_ids'
|
|
|
|
|
// ||
|
|
|
|
|
// $rule['rule'] === 'card_product_with_taxonomy_ids'
|
|
|
|
|
// ||
|
|
|
|
|
// $rule['rule'] === 'card_post_with_taxonomy_ids'
|
|
|
|
|
) {
|
|
|
|
|
$is_blocksy_page = blocksy_is_page();
|
|
|
|
|
|
|
|
|
|
global $blocksy_is_quick_view;
|
|
|
|
|
global $wp_query;
|
|
|
|
|
|
|
|
|
|
global $post;
|
|
|
|
|
|
|
|
|
|
if (is_singular() || $is_blocksy_page || $wp_query->in_the_loop) {
|
|
|
|
|
$post_id = get_the_ID();
|
|
|
|
|
|
|
|
|
|
if ($is_blocksy_page) {
|
|
|
|
|
$post_id = $is_blocksy_page;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($wp_query->in_the_loop) {
|
|
|
|
|
$post_id = get_the_ID();
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-12 13:13:07 +01:00
|
|
|
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
2025-08-27 08:44:30 +02:00
|
|
|
if (wp_doing_ajax() && isset($_GET['product_id'])) {
|
2025-12-12 13:13:07 +01:00
|
|
|
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
|
|
|
$post_id = sanitize_text_field(wp_unslash($_GET['product_id']));
|
2025-08-27 08:44:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
isset($rule['payload'])
|
|
|
|
|
&&
|
|
|
|
|
isset($rule['payload']['taxonomy_id'])
|
|
|
|
|
&&
|
|
|
|
|
$post_id
|
|
|
|
|
&&
|
|
|
|
|
get_term($rule['payload']['taxonomy_id'])
|
|
|
|
|
&&
|
|
|
|
|
! is_wp_error(get_term($rule['payload']['taxonomy_id']))
|
|
|
|
|
&&
|
|
|
|
|
in_array(
|
|
|
|
|
get_term($rule['payload']['taxonomy_id'])->taxonomy,
|
|
|
|
|
get_object_taxonomies([
|
|
|
|
|
'post_type' => get_post_type($post_id)
|
|
|
|
|
])
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
return has_term(
|
|
|
|
|
$rule['payload']['taxonomy_id'],
|
|
|
|
|
get_term($rule['payload']['taxonomy_id'])->taxonomy,
|
|
|
|
|
$post_id
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'card_product_with_taxonomy_ids') {
|
|
|
|
|
if ($this->conditions_purpose === 'global') {
|
|
|
|
|
return $this->is_woo_archive();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
global $wp_query;
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$this->conditions_purpose === 'archive-loop'
|
|
|
|
|
&&
|
|
|
|
|
$wp_query->in_the_loop
|
|
|
|
|
&&
|
|
|
|
|
$this->is_woo_archive()
|
|
|
|
|
) {
|
|
|
|
|
$post_id = get_the_ID();
|
|
|
|
|
|
2025-12-12 13:13:07 +01:00
|
|
|
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
2025-08-27 08:44:30 +02:00
|
|
|
if (wp_doing_ajax() && isset($_GET['product_id'])) {
|
2025-12-12 13:13:07 +01:00
|
|
|
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
|
|
|
|
$post_id = sanitize_text_field(wp_unslash($_GET['product_id']));
|
2025-08-27 08:44:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this->match_taxonomy_in_rule_for($rule, $post_id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'card_post_with_taxonomy_ids') {
|
|
|
|
|
if ($this->conditions_purpose === 'global') {
|
|
|
|
|
return $this->is_cpt_archive();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
global $wp_query;
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
$this->conditions_purpose === 'archive-loop'
|
|
|
|
|
&&
|
|
|
|
|
$wp_query->in_the_loop
|
|
|
|
|
&&
|
|
|
|
|
$this->is_cpt_archive()
|
|
|
|
|
) {
|
|
|
|
|
return $this->match_taxonomy_in_rule_for($rule, get_the_ID());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return apply_filters(
|
|
|
|
|
'blocksy:conditions:rules:resolve',
|
|
|
|
|
false,
|
|
|
|
|
$rule
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function match_taxonomy_in_rule_for($rule, $post_id) {
|
|
|
|
|
if (
|
|
|
|
|
isset($rule['payload'])
|
|
|
|
|
&&
|
|
|
|
|
isset($rule['payload']['taxonomy_id'])
|
|
|
|
|
&&
|
|
|
|
|
$post_id
|
|
|
|
|
&&
|
|
|
|
|
get_term($rule['payload']['taxonomy_id'])
|
|
|
|
|
&&
|
|
|
|
|
in_array(
|
|
|
|
|
get_term($rule['payload']['taxonomy_id'])->taxonomy,
|
|
|
|
|
get_object_taxonomies([
|
|
|
|
|
'post_type' => get_post_type($post_id)
|
|
|
|
|
])
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
return has_term(
|
|
|
|
|
$rule['payload']['taxonomy_id'],
|
|
|
|
|
get_term($rule['payload']['taxonomy_id'])->taxonomy,
|
|
|
|
|
$post_id
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function resolve_single_condition_with_prefix($rule, $prefix) {
|
|
|
|
|
if ($rule['rule'] === 'everywhere') {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'singulars') {
|
|
|
|
|
return (
|
|
|
|
|
$prefix === 'single_blog_post'
|
|
|
|
|
||
|
|
|
|
|
$prefix === 'single_page'
|
|
|
|
|
||
|
|
|
|
|
strpos($prefix, '_single') !== false
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'archives') {
|
|
|
|
|
return is_archive();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === '404') {
|
|
|
|
|
return $prefix === '404';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'search') {
|
|
|
|
|
return $prefix === 'search';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'blog') {
|
|
|
|
|
return $prefix === 'blog';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'front_page') {
|
|
|
|
|
return $prefix === 'blog';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'date') {
|
|
|
|
|
return is_date();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'author') {
|
|
|
|
|
return is_author();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'woo_shop') {
|
|
|
|
|
return function_exists('is_shop') && is_shop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'single_post') {
|
|
|
|
|
return $prefix === 'single_blog_post';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'all_post_archives') {
|
|
|
|
|
return is_post_type_archive('post');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'post_categories') {
|
|
|
|
|
return $prefix === 'categories';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'post_tags') {
|
|
|
|
|
return $prefix === 'categories';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'single_page') {
|
|
|
|
|
return $prefix === 'single_page';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'single_product') {
|
|
|
|
|
return $prefix === 'product';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'all_product_archives') {
|
|
|
|
|
return $prefix === 'woo_categories';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'all_product_categories') {
|
|
|
|
|
return $prefix === 'woo_categories';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($rule['rule'] === 'all_product_tags') {
|
|
|
|
|
return $prefix === 'woo_categories';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (strpos($rule['rule'], 'post_type_single_') !== false) {
|
|
|
|
|
return $prefix === str_replace(
|
|
|
|
|
'post_type_single_',
|
|
|
|
|
'',
|
|
|
|
|
$rule['rule']
|
|
|
|
|
) . '_single';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (strpos($rule['rule'], 'post_type_archive_') !== false) {
|
|
|
|
|
return $prefix === str_replace(
|
|
|
|
|
'post_type_archive_',
|
|
|
|
|
'',
|
|
|
|
|
$rule['rule']
|
|
|
|
|
) . '_archive';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (strpos($rule['rule'], 'post_type_taxonomy_') !== false) {
|
|
|
|
|
return $prefix === str_replace(
|
|
|
|
|
'post_type_taxonomy_',
|
|
|
|
|
'',
|
|
|
|
|
$rule['rule']
|
|
|
|
|
) . '_archive';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function is_woo_archive() {
|
|
|
|
|
if (! function_exists('is_shop')) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$is_product_archive_custom = false;
|
|
|
|
|
|
|
|
|
|
if (is_tax()) {
|
|
|
|
|
$object = get_queried_object();
|
|
|
|
|
|
|
|
|
|
$is_product_archive_custom = taxonomy_is_product_attribute(
|
|
|
|
|
$object->taxonomy
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (is_singular()) {
|
|
|
|
|
$object = get_queried_object();
|
|
|
|
|
|
|
|
|
|
if ($object) {
|
|
|
|
|
$is_product_archive_custom = has_shortcode(
|
|
|
|
|
$object->post_content,
|
|
|
|
|
'products'
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
is_shop()
|
|
|
|
|
||
|
|
|
|
|
is_product_tag()
|
|
|
|
|
||
|
|
|
|
|
is_product_category()
|
|
|
|
|
||
|
|
|
|
|
is_product_taxonomy()
|
|
|
|
|
||
|
|
|
|
|
$is_product_archive_custom
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function is_cpt_archive() {
|
|
|
|
|
$is_archive_custom = false;
|
|
|
|
|
|
|
|
|
|
if (is_singular()) {
|
|
|
|
|
$object = get_queried_object();
|
|
|
|
|
|
|
|
|
|
if ($object) {
|
|
|
|
|
$is_product_archive = (
|
|
|
|
|
has_shortcode($object->post_content, 'blocksy_posts')
|
|
|
|
|
||
|
|
|
|
|
has_block('blocksy/query', $object)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
is_home()
|
|
|
|
|
||
|
|
|
|
|
is_archive()
|
|
|
|
|
||
|
|
|
|
|
is_post_type_archive()
|
|
|
|
|
||
|
|
|
|
|
is_category()
|
|
|
|
|
||
|
|
|
|
|
is_tag()
|
|
|
|
|
||
|
|
|
|
|
$is_archive_custom
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|