page_title = __('Single Videos', 'feeds-for-youtube'); $this->menu_title = __('Single Videos', 'feeds-for-youtube'); // YouTube license tier $license_tier = new YouTube_License_Tier; $license_tier_features = $license_tier->tier_features(); // Hide Single Videos page if feature is not available in the tier if (!in_array('convert_videos_to_cpt', $license_tier_features)) { $this->has_page_restriction = true; $this->menu_title = '' . __('Single Videos', 'feeds-for-youtube') . ''; } } public function register() { global $wpdb; parent::register(); $this->posts_table = $wpdb->prefix . 'posts'; $this->meta_table = $wpdb->prefix . 'postmeta'; add_action( 'wp_ajax_sby_get_single_videos', [ $this, 'ajax_query_single_videos' ] ); add_action( 'wp_ajax_sby_all_videos_action', [ $this, 'ajax_all_video_action' ] ); add_action( 'pre_get_posts', [ $this, 'filter_single_videos' ] ); add_action( 'sby_localized_settings', [ $this, 'localize_listing_url' ] ); } public function ajax_query_single_videos() { Util::ajaxPreflightChecks(); $page = esc_sql($_POST['page']); wp_send_json_success(['total_result' => $this->single_videos_total(), 'results' => $this->query_single_videos($page)]); } public function ajax_all_video_action() { Util::ajaxPreflightChecks(); $meta_query = [ 'relation' => 'OR' ]; $exploded_channels = explode(',', $_POST['channel']); if ( is_array( $exploded_channels ) ) { foreach ( $exploded_channels as $channel_id ) { $meta_query[] = [ 'key' => 'sby_channel_title', 'value' => esc_sql( $channel_id ), 'compare' => '=', ]; } } else { $meta_query[] = [ 'key' => 'sby_channel_title', 'value' => esc_sql( $exploded_channels ), 'compare' => '=', ]; } $args = array( 'post_type' => SBY_CPT, 'meta_key' => 'sby_channel_title', 'posts_per_page' => -1, 'meta_query' => $meta_query ); $query = new \WP_Query($args); if($_POST['perform'] === 'publish') { foreach ( $query->get_posts() as $post ) { $postData = [ 'ID' => $post->ID, 'post_status' => 'publish' ]; wp_update_post( $postData ); } } if($_POST['perform'] === 'delete') { foreach ( $query->get_posts() as $post ) { wp_delete_post( $post->ID, true ); } } wp_send_json_success(); } public function filter_single_videos($query) { global $pagenow; if ( isset($_GET['post_type'], $_GET['sby_channel_filter']) && $_GET['post_type'] === SBY_CPT && $pagenow === 'edit.php' && is_admin() && $query->is_main_query() ) { $query->set( 'meta_key', 'sby_channel_title' ); $query->set( 'meta_value', $_GET['sby_channel_filter'] ); } return $query; } public function localize_listing_url($settings) { $settings['single_videos_list'] = admin_url(sprintf('edit.php?post_type=%s', SBY_CPT)); return $settings; } private function query_single_videos($page, $limit = 5) { global $wpdb; $query = sprintf( 'SELECT SUM(%1$s.post_status="publish") AS publish,SUM(%1$s.post_status="draft") AS draft, %2$s.meta_value as title FROM `%2$s` JOIN %1$s ON %2$s.post_id=%1$s.ID WHERE %2$s.meta_key="sby_channel_title" GROUP BY %2$s.meta_value ORDER BY %1$s.ID DESC LIMIT %3$s, %4$s', $this->posts_table, $this->meta_table, ($page * $limit), $limit ); $query = $wpdb->prepare($query); return $wpdb->get_results($query); } private function single_videos_total() { global $wpdb; $total_query = sprintf( 'SELECT SUM(%1$s.post_status="publish") AS publish,SUM(%1$s.post_status="draft") AS draft, %2$s.meta_value as title FROM `%2$s` JOIN %1$s ON %2$s.post_id=%1$s.ID WHERE %2$s.meta_key="sby_channel_title" GROUP BY %2$s.meta_value', $this->posts_table, $this->meta_table ); $total_query = $wpdb->prepare($total_query); $wpdb->get_results($total_query); return $wpdb->num_rows; } }