*/ public static function arguments(array $instance, int $page = 1, array $segment = []): array { $config = array_merge($instance, $segment); $count = max(1, min(50, (int) ($config['count'] ?? 8))); $args = [ 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => $count, 'paged' => max(1, $page), 'ignore_sticky_posts' => true, 'no_found_rows' => false, ]; $categories = RendererHelpers::ids((string) ($config['category_ids'] ?? '')); if (!empty($config['category_id'])) { $categories = [(int) $config['category_id']]; } if ($categories) { $args['category__in'] = $categories; } $tags = RendererHelpers::ids((string) ($config['tag_ids'] ?? '')); if ($tags) { $args['tag__in'] = $tags; } $days = max(0, (int) ($config['limit_day'] ?? 0)); if ($days > 0) { $args['date_query'] = [['after' => gmdate('Y-m-d', time() - ($days * DAY_IN_SECONDS)), 'inclusive' => true]]; } self::apply_order($args, (string) ($config['orderby'] ?? 'date'), (string) ($config['order'] ?? 'DESC')); self::apply_pay_type($args, (string) ($config['pay_type'] ?? '')); return $args; } public static function segment(array $instance, string $segment): array { $tabs = array_values((array) ($instance['tabs'] ?? [])); if (!$tabs) { return []; } $index = ctype_digit($segment) ? (int) $segment : 0; return isset($tabs[$index]) && is_array($tabs[$index]) ? $tabs[$index] : $tabs[0]; } private static function apply_order(array &$args, string $orderby, string $order): void { $args['order'] = strtoupper($order) === 'ASC' ? 'ASC' : 'DESC'; $meta = [ 'views' => class_exists('AKSRT\\Core\\DomainModel') ? \AKSRT\Core\DomainModel::POST_VIEW_COUNT_KEY : 'aksrt_post_views', 'likes' => '_aksrt_like_count', 'favorites' => '_aksrt_favorite_count', 'downloads' => class_exists('AKSRT\\Core\\DomainModel') ? \AKSRT\Core\DomainModel::RESOURCE_DOWNLOAD_COUNT_KEY : '_aksrt_res_download_count', ]; if (isset($meta[$orderby])) { $args['meta_key'] = $meta[$orderby]; $args['orderby'] = 'meta_value_num'; return; } if ($orderby === 'comments') { $args['orderby'] = 'comment_count'; } elseif (in_array($orderby, ['date', 'modified', 'rand'], true)) { $args['orderby'] = $orderby; } else { $args['orderby'] = 'date'; } } private static function apply_pay_type(array &$args, string $pay_type): void { if (!in_array($pay_type, self::PAY_TYPES, true)) { return; } $type_key = class_exists('AKSRT\\Core\\DomainModel') ? \AKSRT\Core\DomainModel::PAY_TYPE_KEY : '_aksrt_pay_type'; $meta_key = class_exists('AKSRT\\Core\\DomainModel') ? \AKSRT\Core\DomainModel::PAY_META_KEY : '_aksrt_pay'; $args['meta_query'] = [[ 'relation' => 'OR', ['key' => $type_key, 'value' => $pay_type, 'compare' => '='], ['key' => $meta_key, 'value' => '"pay_type";s:' . strlen($pay_type) . ':"' . $pay_type . '"', 'compare' => 'LIKE'], ]]; } }