'sodino_rule', 'plural' => 'sodino_rules', 'ajax' => false, ]); $this->repository = $repository; } public function get_columns() { return [ 'cb' => '', 'name' => __('عنوان قانون', 'sodino'), 'condition_type' => __('شرط', 'sodino'), 'action_value' => __('عملیات', 'sodino'), 'enabled' => __('وضعیت', 'sodino'), 'actions' => __('عملیات', 'sodino'), ]; } protected function get_sortable_columns() { return [ 'name' => ['name', true], ]; } protected function column_cb($item) { return sprintf('', $item->id); } public function get_bulk_actions() { return [ 'delete' => __('حذف گروهی', 'sodino'), ]; } public function column_actions($item) { $edit_url = admin_url('admin.php?page=sodino-add-rule&action=edit&id=' . $item->id); $delete_url = wp_nonce_url(admin_url('admin.php?page=sodino-rules&action=delete&id=' . $item->id), 'delete_rule'); return sprintf( '%s | %s', esc_url($edit_url), esc_html__('ویرایش', 'sodino'), esc_url($delete_url), esc_js(__('آیا از حذف این قانون مطمئن هستید؟', 'sodino')), esc_html__('حذف', 'sodino') ); } public function column_name($item) { $edit_url = admin_url('admin.php?page=sodino-add-rule&action=edit&id=' . $item->id); $title = sprintf('%s', esc_url($edit_url), esc_html($item->name)); return $title; } public function column_condition_type($item) { $labels = [ 'user_type' => __('نوع کاربر', 'sodino'), 'product_category' => __('دسته‌بندی محصول', 'sodino'), 'product_ids' => __('محصولات خاص', 'sodino'), 'cart_total_min' => __('حداقل مبلغ سبد', 'sodino'), 'cart_total_max' => __('حداکثر مبلغ سبد', 'sodino'), 'cart_item_count_min' => __('حداقل تعداد سبد', 'sodino'), 'cart_item_count_max' => __('حداکثر تعداد سبد', 'sodino'), ]; $type = $labels[$item->condition_type] ?? $item->condition_type; return esc_html(sprintf('%s: %s', $type, $item->condition_value)); } public function column_action_value($item) { $labels = [ 'discount_percent' => __('درصد تخفیف', 'sodino'), 'discount_fixed' => __('تخفیف ثابت', 'sodino'), 'set_price' => __('قیمت ثابت', 'sodino'), 'free_shipping' => __('ارسال رایگان', 'sodino'), ]; $type = $labels[$item->action_type] ?? $item->action_type; return esc_html(sprintf('%s: %s', $type, $item->action_value)); } public function column_enabled($item) { return $item->enabled ? __('فعال', 'sodino') : __('غیرفعال', 'sodino'); } public function column_default($item, $column_name) { switch ($column_name) { case 'name': case 'condition_type': case 'action_value': case 'enabled': case 'actions': return ''; default: return ''; } } public function prepare_items() { $columns = $this->get_columns(); $hidden = []; $sortable = $this->get_sortable_columns(); $this->_column_headers = [$columns, $hidden, $sortable]; $this->process_bulk_action(); $all_items = $this->repository->getAll(); $current_page = $this->get_pagenum(); $total_items = count($all_items); $this->items = array_slice($all_items, ($current_page - 1) * $this->items_per_page, $this->items_per_page); $this->set_pagination_args([ 'total_items' => $total_items, 'per_page' => $this->items_per_page, 'total_pages' => ceil($total_items / $this->items_per_page), ]); } public function process_bulk_action() { if ('delete' === $this->current_action()) { $rule_ids = isset($_POST['rule_ids']) ? array_map('intval', $_POST['rule_ids']) : []; if (!empty($rule_ids) && check_admin_referer('bulk-' . $this->_args['plural'])) { foreach ($rule_ids as $id) { $this->repository->delete($id); } } } } }