79 lines
1.8 KiB
PHP
79 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace ElementorPro\Modules\DisplayConditions\Conditions\Base;
|
|
|
|
use Elementor\Controls_Manager;
|
|
use ElementorPro\Modules\DisplayConditions\Classes\Comparator_Provider;
|
|
use ElementorPro\Modules\QueryControl\Module as QueryControlModule;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly
|
|
}
|
|
|
|
abstract class Archive_Condition_Base extends Condition_Base {
|
|
|
|
private string $condition_key;
|
|
|
|
public function __construct( $condition_key ) {
|
|
$this->condition_key = $condition_key;
|
|
|
|
parent::__construct();
|
|
}
|
|
|
|
abstract public function get_name();
|
|
|
|
abstract public function get_label();
|
|
|
|
abstract protected function get_taxonomy();
|
|
|
|
public function get_group(): string {
|
|
return 'archive';
|
|
}
|
|
|
|
abstract protected function is_of_taxonomy( $args ): bool;
|
|
|
|
protected function check_is_of_taxonomy( $args ) {
|
|
switch ( $args['comparator'] ) {
|
|
case Comparator_Provider::COMPARATOR_IS:
|
|
return $this->is_of_taxonomy( $args );
|
|
case Comparator_Provider::COMPARATOR_IS_NOT:
|
|
return ! $this->is_of_taxonomy( $args );
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public function get_options() {
|
|
$comparators = Comparator_Provider::get_comparators( [
|
|
Comparator_Provider::COMPARATOR_IS,
|
|
Comparator_Provider::COMPARATOR_IS_NOT,
|
|
] );
|
|
$taxonomy = $this->get_taxonomy();
|
|
|
|
$this->add_control(
|
|
'comparator',
|
|
[
|
|
'type' => Controls_Manager::SELECT,
|
|
'options' => $comparators,
|
|
'default' => Comparator_Provider::COMPARATOR_IS,
|
|
]
|
|
);
|
|
|
|
$this->add_control(
|
|
$this->condition_key,
|
|
[
|
|
'type' => QueryControlModule::QUERY_CONTROL_ID,
|
|
'autocomplete' => [
|
|
'object' => QueryControlModule::QUERY_OBJECT_TAX,
|
|
'query' => [
|
|
'taxonomy' => $taxonomy,
|
|
],
|
|
],
|
|
'multiple' => true,
|
|
'required' => true,
|
|
'placeholder' => esc_html__( 'Type to search', 'elementor-pro' ),
|
|
]
|
|
);
|
|
}
|
|
}
|