You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.7 KiB
PHTML
60 lines
1.7 KiB
PHTML
8 months ago
|
<?php
|
||
|
/**
|
||
|
* Date Archive condition logic swiftly crafted.
|
||
|
*
|
||
|
* @since 4.11.0
|
||
|
*
|
||
|
* @package Divi
|
||
|
* @sub-package Builder
|
||
|
*/
|
||
|
|
||
|
namespace Module\Field\DisplayConditions;
|
||
|
|
||
|
use DateTimeImmutable;
|
||
|
|
||
|
/**
|
||
|
* Date Archive Condition Trait.
|
||
|
*/
|
||
|
trait DateArchiveCondition {
|
||
|
|
||
|
/**
|
||
|
* Processes "Date Archive" condition.
|
||
|
*
|
||
|
* @since 4.11.0
|
||
|
*
|
||
|
* @param array $condition_settings Containing all settings of the condition.
|
||
|
*
|
||
|
* @return boolean Condition output.
|
||
|
*/
|
||
|
protected function _process_date_archive_condition( $condition_settings ) {
|
||
|
if ( ! is_date() ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// Checks for additional display rule for compatibility with Conditional Display older versions which didn't use `displayRule` key.
|
||
|
$legacy_display_rule = isset( $condition_settings['dateArchiveDisplay'] ) ? $condition_settings['dateArchiveDisplay'] : 'isAfter';
|
||
|
$display_rule = isset( $condition_settings['displayRule'] ) ? $condition_settings['displayRule'] : $legacy_display_rule;
|
||
|
$date = isset( $condition_settings['dateArchive'] ) ? $condition_settings['dateArchive'] : '';
|
||
|
|
||
|
$year = get_query_var( 'year' );
|
||
|
$monthnum = get_query_var( 'monthnum' ) === 0 ? 1 : get_query_var( 'monthnum' );
|
||
|
$day = get_query_var( 'day' ) === 0 ? 1 : get_query_var( 'day' );
|
||
|
$archive_date = sprintf( '%s-%s-%s', $year, $monthnum, $day );
|
||
|
|
||
|
$target_date = new DateTimeImmutable( $date, wp_timezone() );
|
||
|
$current_arhive_date = new DateTimeImmutable( $archive_date, wp_timezone() );
|
||
|
|
||
|
switch ( $display_rule ) {
|
||
|
case 'isAfter':
|
||
|
return ( $current_arhive_date > $target_date );
|
||
|
|
||
|
case 'isBefore':
|
||
|
return ( $current_arhive_date < $target_date );
|
||
|
|
||
|
default:
|
||
|
return ( $current_arhive_date > $target_date );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|