/** * Add the admin menu items for gigs. * * @since 1.0.0 */ function audiotheme_gigs_admin_menu() { global $pagenow, $plugin_page, $typenow; // Redirect the default Manage Gigs screen. if ('audiotheme_gig' === $typenow && 'edit.php' === $pagenow) { wp_safe_redirect(esc_url_raw(get_audiotheme_gig_admin_url())); exit; } $gig_object = get_post_type_object('audiotheme_gig'); $venue_object = get_post_type_object('audiotheme_venue'); // Remove the default gigs menu item and replace it with the screen using the custom post list table. remove_submenu_page('audiotheme-gigs', 'edit.php?post_type=audiotheme_gig'); $manage_gigs_hook = add_menu_page($gig_object->labels->name, $gig_object->labels->menu_name, 'edit_posts', 'audiotheme-gigs', 'audiotheme_gigs_manage_screen', audiotheme_encode_svg('admin/images/dashicons/gigs.svg'), 512); add_submenu_page('audiotheme-gigs', $gig_object->labels->name, $gig_object->labels->all_items, 'edit_posts', 'audiotheme-gigs', 'audiotheme_gigs_manage_screen'); $edit_gig_hook = add_submenu_page('audiotheme-gigs', $gig_object->labels->add_new_item, $gig_object->labels->add_new, 'edit_posts', 'post-new.php?post_type=audiotheme_gig'); $manage_venues_hook = add_submenu_page('audiotheme-gigs', $venue_object->labels->name, $venue_object->labels->menu_name, 'edit_posts', 'audiotheme-venues', 'audiotheme_venues_manage_screen'); $edit_venue_hook = add_submenu_page('audiotheme-gigs', $venue_object->labels->add_new_item, $venue_object->labels->add_new_item, 'edit_posts', 'audiotheme-venue', 'audiotheme_venue_edit_screen'); add_filter('parent_file', 'audiotheme_gigs_admin_menu_highlight'); add_action('load-' . $manage_gigs_hook, 'audiotheme_gigs_manage_screen_setup'); add_action('load-' . $edit_gig_hook, 'audiotheme_gig_edit_screen_setup'); add_action('load-' . $manage_venues_hook, 'audiotheme_venues_manage_screen_setup'); add_action('load-' . $edit_venue_hook, 'audiotheme_venue_edit_screen_setup'); }
/** * Process actions. * * @since 1.0.0 * @see wp-admin/edit.php */ function process_actions() { global $wpdb; $action = ''; $current_user = wp_get_current_user(); $post_type_object = get_post_type_object('audiotheme_gig'); if (!empty($_REQUEST['ids'])) { $post_ids = is_array($_REQUEST['ids']) ? $_REQUEST['ids'] : explode(',', $_REQUEST['ids']); $post_ids = array_map('absint', $post_ids); $action = $this->current_action(); } $sendback = remove_query_arg(array('trashed', 'untrashed', 'deleted', 'ids'), wp_get_referer()); if (!$sendback) { $sendback = get_audiotheme_gig_admin_url(); } $sendback = add_query_arg('paged', $this->get_pagenum(), $sendback); if (!empty($action)) { check_admin_referer('bulk-' . $this->_args['plural']); switch ($action) { case 'trash': $trashed = 0; foreach ((array) $post_ids as $post_id) { if (!current_user_can($post_type_object->cap->delete_post, $post_id)) { wp_die(__('You are not allowed to move this item to the Trash.', 'audiotheme')); } if (!wp_trash_post($post_id)) { wp_die(__('Error moving to Trash.', 'audiotheme')); } $trashed++; } $sendback = add_query_arg(array('trashed' => $trashed, 'ids' => join(',', $post_ids)), $sendback); break; case 'untrash': $untrashed = 0; foreach ((array) $post_ids as $post_id) { if (!current_user_can($post_type_object->cap->delete_post, $post_id)) { wp_die(__('You are not allowed to restore this item from the Trash.', 'audiotheme')); } if (!wp_untrash_post($post_id)) { wp_die(__('Error in restoring from Trash.', 'audiotheme')); } $untrashed++; } $sendback = add_query_arg('untrashed', $untrashed, $sendback); break; case 'delete': $deleted = 0; foreach ($post_ids as $post_id) { if (!current_user_can($post_type_object->cap->delete_post, $post_id)) { wp_die(__('You are not allowed to delete this item.', 'audiotheme')); } if (!wp_delete_post($post_id)) { wp_die(__('Error in deleting...', 'audiotheme')); } $deleted++; } $sendback = add_query_arg('deleted', $deleted, $sendback); default: break; } $sendback = remove_query_arg(array('action', 'action2'), $sendback); wp_safe_redirect(esc_url_raw($sendback)); exit; } if (!empty($_REQUEST['_wp_http_referer'])) { $redirect = remove_query_arg(array('_wp_http_referer', '_wpnonce'), stripslashes($_SERVER['REQUEST_URI'])); wp_safe_redirect(esc_url_raw($redirect)); exit; } }
} if (isset($_REQUEST['skipped']) && (int) $_REQUEST['skipped']) { unset($_REQUEST['skipped']); } if (isset($_REQUEST['locked']) && (int) $_REQUEST['locked']) { $messages[] = sprintf(_n('%s item not updated, somebody is editing it.', '%s items not updated, somebody is editing them.', $_REQUEST['locked']), number_format_i18n($_REQUEST['locked'])); unset($_REQUEST['locked']); } if (isset($_REQUEST['deleted']) && (int) $_REQUEST['deleted']) { $messages[] = sprintf(_n('Item permanently deleted.', '%s items permanently deleted.', $_REQUEST['deleted']), number_format_i18n($_REQUEST['deleted'])); unset($_REQUEST['deleted']); } if (isset($_REQUEST['trashed']) && (int) $_REQUEST['trashed']) { $messages[] = sprintf(_n('Item moved to the Trash.', '%s items moved to the Trash.', $_REQUEST['trashed']), number_format_i18n($_REQUEST['trashed'])); $ids = isset($_REQUEST['ids']) ? $_REQUEST['ids'] : 0; $messages[] = '<a href="' . esc_url(wp_nonce_url(get_audiotheme_gig_admin_url("action=untrash&ids={$ids}"), 'bulk-gigs')) . '">' . __('Undo', 'audiotheme') . '</a>'; unset($_REQUEST['trashed']); } if (isset($_REQUEST['untrashed']) && (int) $_REQUEST['untrashed']) { $messages[] = sprintf(_n('Item restored from the Trash.', '%s items restored from the Trash.', $_REQUEST['untrashed']), number_format_i18n($_REQUEST['untrashed'])); unset($_REQUEST['undeleted']); } if ($messages) { echo join(' ', $messages); } unset($messages); $_SERVER['REQUEST_URI'] = remove_query_arg(array('locked', 'skipped', 'updated', 'deleted', 'trashed', 'untrashed'), $_SERVER['REQUEST_URI']); ?> </p> </div> <?php
/** * Display other columns. * * @since 1.0.0 * * @param WP_Post $item Venue post object. * @param string $column_name The column id to display. * @return string Column value for display. */ function column_default($item, $column_name) { switch ($column_name) { case 'gigs': $count = get_post_meta($item->ID, '_audiotheme_gig_count', true); $admin_url = get_audiotheme_gig_admin_url(array('post_type' => 'audiotheme_gig', 'post_status' => 'any', 'venue' => $item->ID)); return empty($count) ? $count : sprintf('<a href="%s">%d</a>', $admin_url, $count); case 'website': return !empty($item->website) ? sprintf(' <a href="%s" class="venue-website-link" target="_blank"><img src="' . AUDIOTHEME_URI . 'admin/images/link.png" width="16" height="16" alt="%s"></a>', esc_url($item->website), esc_attr(__('Visit venue website', 'audiotheme'))) : ''; default: return isset($item->{$column_name}) ? $item->{$column_name} : ''; } }