'yacht', 'plural' => 'yachts', 'ajax' => false, ) ); } /** * Get columns * * @return array */ public function get_columns() { return array( 'cb' => '', 'title' => __( 'Nazwa jachtu', 'yacht-booking' ), 'bookings' => __( 'Rezerwacje', 'yacht-booking' ), 'date' => __( 'Data utworzenia', 'yacht-booking' ), ); } /** * Get sortable columns * * @return array */ public function get_sortable_columns() { return array( 'title' => array( 'title', false ), 'date' => array( 'date', true ), ); } /** * Get bulk actions * * @return array */ public function get_bulk_actions() { return array( 'delete' => __( 'Usuń', 'yacht-booking' ), ); } /** * Prepare items for display */ public function prepare_items() { $per_page = 20; $current_page = $this->get_pagenum(); $orderby = isset( $_GET['orderby'] ) ? sanitize_text_field( wp_unslash( $_GET['orderby'] ) ) : 'title'; $order = isset( $_GET['order'] ) ? sanitize_text_field( wp_unslash( $_GET['order'] ) ) : 'ASC'; $search = isset( $_GET['s'] ) ? sanitize_text_field( wp_unslash( $_GET['s'] ) ) : ''; $args = array( 'post_type' => 'yacht', 'posts_per_page' => $per_page, 'paged' => $current_page, 'orderby' => $orderby, 'order' => $order, 'post_status' => 'publish', ); if ( ! empty( $search ) ) { $args['s'] = $search; } $query = new \WP_Query( $args ); $this->items = $query->posts; $this->set_pagination_args( array( 'total_items' => $query->found_posts, 'per_page' => $per_page, 'total_pages' => $query->max_num_pages, ) ); $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); $this->_column_headers = array( $columns, $hidden, $sortable ); } /** * Column checkbox * * @param object $item Item. * @return string */ public function column_cb( $item ) { return sprintf( '', $item->ID ); } /** * Column title * * @param object $item Item. * @return string */ public function column_title( $item ) { $edit_url = admin_url( 'admin.php?page=yacht-bookings-add-yacht&yacht_id=' . $item->ID ); $delete_url = wp_nonce_url( admin_url( 'admin.php?page=yacht-bookings&action=delete&yacht=' . $item->ID ), 'delete_yacht_' . $item->ID ); $actions = array( 'edit' => sprintf( '%s', esc_url( $edit_url ), __( 'Edytuj', 'yacht-booking' ) ), 'delete' => sprintf( '%s', esc_url( $delete_url ), esc_js( __( 'Czy na pewno chcesz usunąć ten jacht? Spowoduje to również usunięcie wszystkich powiązanych rezerwacji.', 'yacht-booking' ) ), __( 'Usuń', 'yacht-booking' ) ), ); return sprintf( '%s%s', esc_url( $edit_url ), esc_html( $item->post_title ), $this->row_actions( $actions ) ); } /** * Column bookings count * * @param object $item Item. * @return string */ public function column_bookings( $item ) { $count = $this->count_bookings( $item->ID ); if ( $count > 0 ) { return sprintf( '%d', esc_url( admin_url( 'admin.php?page=yacht-bookings-list&yacht_filter=' . $item->ID ) ), $count ); } return '0'; } /** * Column date * * @param object $item Item. * @return string */ public function column_date( $item ) { return get_the_date( Settings::get_date_format() . ' H:i', $item ); } /** * Default column * * @param object $item Item. * @param string $column_name Column name. * @return string */ public function column_default( $item, $column_name ) { return ''; } /** * Count bookings for yacht * * @param int $yacht_id Yacht ID. * @return int */ private function count_bookings( $yacht_id ) { $query = new \WP_Query( array( 'post_type' => 'yacht_booking', 'posts_per_page' => -1, 'meta_query' => array( array( 'key' => '_booking_yacht_id', 'value' => $yacht_id, ), ), 'fields' => 'ids', ) ); return $query->found_posts; } /** * Message when no items */ public function no_items() { esc_html_e( 'Brak jachtów. Dodaj pierwszy jacht!', 'yacht-booking' ); } }