post_type ) {
$submenu_file = 'edit.php?post_type=aiovg_videos';
$parent_file = 'all-in-one-video-gallery';
}
return $parent_file;
}
/**
* Register the custom post type "aiovg_videos".
*
* @since 1.0.0
*/
public function register_post_type() {
$featured_images_settings = aiovg_get_option( 'aiovg_featured_images_settings' );
$permalink_settings = aiovg_get_option( 'aiovg_permalink_settings' );
$labels = array(
'name' => _x( 'Videos', 'Post Type General Name', 'all-in-one-video-gallery' ),
'singular_name' => _x( 'Video', 'Post Type Singular Name', 'all-in-one-video-gallery' ),
'menu_name' => __( 'Video Gallery', 'all-in-one-video-gallery' ),
'name_admin_bar' => __( 'Video', 'all-in-one-video-gallery' ),
'archives' => __( 'Video Archives', 'all-in-one-video-gallery' ),
'attributes' => __( 'Video Attributes', 'all-in-one-video-gallery' ),
'parent_item_colon' => __( 'Parent Video:', 'all-in-one-video-gallery' ),
'all_items' => __( 'All Videos', 'all-in-one-video-gallery' ),
'add_new_item' => __( 'Add New Video', 'all-in-one-video-gallery' ),
'add_new' => __( 'Add New', 'all-in-one-video-gallery' ),
'new_item' => __( 'New Video', 'all-in-one-video-gallery' ),
'edit_item' => __( 'Edit Video', 'all-in-one-video-gallery' ),
'update_item' => __( 'Update Video', 'all-in-one-video-gallery' ),
'view_item' => __( 'View Video', 'all-in-one-video-gallery' ),
'view_items' => __( 'View Videos', 'all-in-one-video-gallery' ),
'search_items' => __( 'Search Video', 'all-in-one-video-gallery' ),
'not_found' => __( 'No videos found', 'all-in-one-video-gallery' ),
'not_found_in_trash' => __( 'Not found in Trash', 'all-in-one-video-gallery' ),
'featured_image' => __( 'Featured Image', 'all-in-one-video-gallery' ),
'set_featured_image' => __( 'Set featured image', 'all-in-one-video-gallery' ),
'remove_featured_image' => __( 'Remove featured image', 'all-in-one-video-gallery' ),
'use_featured_image' => __( 'Use as featured image', 'all-in-one-video-gallery' ),
'insert_into_item' => __( 'Insert into video', 'all-in-one-video-gallery' ),
'uploaded_to_this_item' => __( 'Uploaded to this video', 'all-in-one-video-gallery' ),
'items_list' => __( 'Videos list', 'all-in-one-video-gallery' ),
'items_list_navigation' => __( 'Videos list navigation', 'all-in-one-video-gallery' ),
'filter_items_list' => __( 'Filter videos list', 'all-in-one-video-gallery' ),
);
$supports = array( 'title', 'editor', 'author', 'excerpt', 'comments' );
$has_thumbnail = isset( $featured_images_settings['enabled'] ) ? (int) $featured_images_settings['enabled'] : 0;
if ( $has_thumbnail == 1 ) {
$supports[] = 'thumbnail';
}
$args = array(
'label' => __( 'Video', 'all-in-one-video-gallery' ),
'description' => __( 'Video Description', 'all-in-one-video-gallery' ),
'labels' => $labels,
'supports' => $supports,
'taxonomies' => array(),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => false,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'show_in_rest' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'aiovg_video',
'map_meta_cap' => true
);
if ( is_array( $permalink_settings ) ) {
if ( ! empty( $permalink_settings['video'] ) ) {
$args['rewrite'] = array(
'slug' => sanitize_title( $permalink_settings['video'] ),
'with_front' => false
);
}
if ( ! empty( $permalink_settings['video_archive_page'] ) ) {
$page_id = (int) $permalink_settings['video_archive_page'];
$post = get_post( $page_id );
if ( $post && 'publish' === $post->post_status ) {
$permalink = get_permalink( $page_id );
if ( $permalink ) {
$site_url = trailingslashit( home_url() );
$slug = str_replace( $site_url, '', $permalink );
$slug = trim( $slug, '/' );
$slug = urldecode( $slug );
$args['rewrite'] = array(
'slug' => $slug,
'with_front' => false
);
$args['has_archive'] = false;
}
}
}
}
register_post_type( 'aiovg_videos', $args );
}
/**
* Adds custom meta fields in the "Publish" meta box.
*
* @since 1.0.0
*/
public function post_submitbox_misc_actions() {
global $post, $post_type;
if ( 'aiovg_videos' == $post_type ) {
$post_id = $post->ID;
$featured = get_post_meta( $post_id, 'featured', true );
require_once AIOVG_PLUGIN_DIR . 'admin/partials/video-submitbox.php';
}
}
/**
* Register meta boxes.
*
* @since 1.0.0
*/
public function add_meta_boxes() {
add_meta_box(
'aiovg-video-metabox',
__( 'Video', 'all-in-one-video-gallery' ),
array( $this, 'display_meta_box_video' ),
'aiovg_videos',
'normal',
'high'
);
}
/**
* Display "Video" meta box.
*
* @since 1.0.0
* @param WP_Post $post WordPress Post object.
*/
public function display_meta_box_video( $post ) {
$post_meta = get_post_meta( $post->ID );
$post_meta = apply_filters( 'aiovg_get_post_meta', $post_meta, $post->ID, '', false, 'aiovg_videos' );
require_once AIOVG_PLUGIN_DIR . 'admin/partials/video-metabox.php';
}
/**
* Save meta data.
*
* @since 1.0.0
* @param int $post_id Post ID.
* @param WP_Post $post The post object.
* @return int $post_id If the save was successful or not.
*/
public function save_meta_data( $post_id, $post ) {
if ( ! isset( $_POST['post_type'] ) ) {
return $post_id;
}
// Check this is the "aiovg_videos" custom post type
if ( 'aiovg_videos' != $post->post_type ) {
return $post_id;
}
// If this is an autosave, our form has not been submitted, so we don't want to do anything
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return $post_id;
}
// Check the logged in user has permission to edit this post
if ( ! aiovg_current_user_can( 'edit_aiovg_video', $post_id ) ) {
return $post_id;
}
// Check if "aiovg_video_submitbox_nonce" nonce is set
if ( isset( $_POST['aiovg_video_submitbox_nonce'] ) ) {
// Verify that the nonce is valid
if ( wp_verify_nonce( $_POST['aiovg_video_submitbox_nonce'], 'aiovg_save_video_submitbox' ) ) {
// OK to save meta data.
$featured = isset( $_POST['featured'] ) ? 1 : 0;
update_post_meta( $post_id, 'featured', $featured );
}
} else {
$featured = (int) get_post_meta( $post_id, 'featured', true );
update_post_meta( $post_id, 'featured', $featured );
}
// Check if "aiovg_video_metabox_nonce" nonce is set
if ( isset( $_POST['aiovg_video_metabox_nonce'] ) ) {
// Verify that the nonce is valid
if ( wp_verify_nonce( $_POST['aiovg_video_metabox_nonce'], 'aiovg_save_video_metabox' ) ) {
// OK to save meta data
$featured_images_settings = aiovg_get_option( 'aiovg_featured_images_settings' );
$private_base_url = aiovg_get_private_base_url();
$type = isset( $_POST['type'] ) ? sanitize_text_field( $_POST['type'] ) : 'default';
update_post_meta( $post_id, 'type', $type );
delete_post_meta( $post_id, 'is_video_uploaded' );
$mp4 = isset( $_POST['mp4'] ) ? trim( $_POST['mp4'] ) : '';
if ( ! empty( $mp4 ) ) {
// Check if the URL is a masked uploaded file
if ( 0 === strpos( $mp4, $private_base_url ) ) {
// Extract the encoded portion
$encoded = substr( $mp4, strlen( $private_base_url ) );
// Decode the masked URL
$decoded = aiovg_base64_decode( $encoded );
// Sanitize the real file URL
$mp4 = aiovg_sanitize_url( $decoded );
update_post_meta( $post_id, 'is_video_uploaded', 1 );
} else {
// Direct URL entered by the user
$mp4 = aiovg_sanitize_url( $mp4 );
}
}
update_post_meta( $post_id, 'mp4', $mp4 );
update_post_meta( $post_id, 'mp4_id', attachment_url_to_postid( $mp4 ) );
$has_webm = isset( $_POST['has_webm'] ) ? 1 : 0;
update_post_meta( $post_id, 'has_webm', $has_webm );
$webm = isset( $_POST['webm'] ) ? aiovg_sanitize_url( $_POST['webm'] ) : '';
update_post_meta( $post_id, 'webm', $webm );
update_post_meta( $post_id, 'webm_id', attachment_url_to_postid( $webm ) );
$has_ogv = isset( $_POST['has_ogv'] ) ? 1 : 0;
update_post_meta( $post_id, 'has_ogv', $has_ogv );
$ogv = isset( $_POST['ogv'] ) ? aiovg_sanitize_url( $_POST['ogv'] ) : '';
update_post_meta( $post_id, 'ogv', $ogv );
update_post_meta( $post_id, 'ogv_id', attachment_url_to_postid( $ogv ) );
$quality_level = isset( $_POST['quality_level'] ) ? sanitize_text_field( $_POST['quality_level'] ) : '';
update_post_meta( $post_id, 'quality_level', $quality_level );
if ( ! empty( $_POST['sources'] ) && ! empty( $_POST['quality_levels'] ) ) {
$values = array();
$quality_levels = array_map( 'sanitize_text_field', $_POST['quality_levels'] );
$sources = array_map( 'aiovg_sanitize_url', $_POST['sources'] );
foreach ( $sources as $index => $source ) {
if ( ! empty( $source ) && ! empty( $quality_levels[ $index ] ) ) {
$values[] = array(
'src' => $source,
'src_id' => attachment_url_to_postid( $source ),
'quality' => $quality_levels[ $index ]
);
}
}
update_post_meta( $post_id, 'sources', $values );
}
$hls = isset( $_POST['hls'] ) ? aiovg_sanitize_url( $_POST['hls'] ) : '';
update_post_meta( $post_id, 'hls', $hls );
$dash = isset( $_POST['dash'] ) ? aiovg_sanitize_url( $_POST['dash'] ) : '';
update_post_meta( $post_id, 'dash', $dash );
$youtube = isset( $_POST['youtube'] ) ? aiovg_sanitize_url( aiovg_resolve_youtube_url( $_POST['youtube'] ) ) : '';
update_post_meta( $post_id, 'youtube', $youtube );
$vimeo = isset( $_POST['vimeo'] ) ? aiovg_sanitize_url( $_POST['vimeo'] ) : '';
update_post_meta( $post_id, 'vimeo', $vimeo );
$dailymotion = isset( $_POST['dailymotion'] ) ? aiovg_sanitize_url( $_POST['dailymotion'] ) : '';
update_post_meta( $post_id, 'dailymotion', $dailymotion );
$rumble = isset( $_POST['rumble'] ) ? aiovg_sanitize_url( $_POST['rumble'] ) : '';
update_post_meta( $post_id, 'rumble', $rumble );
$facebook = isset( $_POST['facebook'] ) ? aiovg_sanitize_url( $_POST['facebook'] ) : '';
update_post_meta( $post_id, 'facebook', $facebook );
$embedcode = isset( $_POST['embedcode'] ) ? trim( wp_unslash( $_POST['embedcode'] ) ) : '';
if ( $embedcode && filter_var( $embedcode, FILTER_VALIDATE_URL ) ) {
$parsed = wp_parse_url( $embedcode );
// Allow only http / https URLs
if ( isset( $parsed['scheme'] ) && in_array( $parsed['scheme'], array( 'http', 'https' ) ) ) {
$embedcode = sprintf(
'',
esc_url( $embedcode )
);
}
}
add_filter( 'wp_kses_allowed_html', 'aiovg_allow_iframe_script_tags' );
$embedcode = ! empty( $embedcode ) ? wp_kses_post( $embedcode ) : '';
update_post_meta( $post_id, 'embedcode', $embedcode );
remove_filter( 'wp_kses_allowed_html', 'aiovg_allow_iframe_script_tags' );
$duration = '';
if ( ! empty( $_POST['duration'] ) ) {
$duration = sanitize_text_field( $_POST['duration'] );
} else {
if ( 'vimeo' == $type && ! empty( $vimeo ) ) {
$duration = aiovg_get_vimeo_video_duration( $vimeo );
} elseif ( 'dailymotion' == $type && ! empty( $dailymotion ) ) {
$duration = aiovg_get_dailymotion_video_duration( $dailymotion );
} elseif ( 'rumble' == $type && ! empty( $rumble ) ) {
$duration = aiovg_get_rumble_video_duration( $rumble );
} elseif ( 'embedcode' == $type && ! empty( $embedcode ) ) {
$duration = aiovg_get_embedcode_video_duration( $embedcode );
}
$duration = aiovg_convert_seconds_to_human_time( $duration );
}
update_post_meta( $post_id, 'duration', $duration );
$views = isset( $_POST['views'] ) ? (int) $_POST['views'] : 0;
update_post_meta( $post_id, 'views', $views );
$likes = isset( $_POST['likes'] ) ? (int) $_POST['likes'] : 0;
update_post_meta( $post_id, 'likes', $likes );
$dislikes = isset( $_POST['dislikes'] ) ? (int) $_POST['dislikes'] : 0;
update_post_meta( $post_id, 'dislikes', $dislikes );
$download = isset( $_POST['download'] ) ? (int) $_POST['download'] : 0;
update_post_meta( $post_id, 'download', $download );
// Poster Image
delete_post_meta( $post_id, 'is_image_uploaded' );
$image = isset( $_POST['image'] ) ? trim( $_POST['image'] ) : '';
$image_id = 0;
if ( ! empty( $image ) ) {
// Check if the URL is a masked uploaded file
if ( 0 === strpos( $image, $private_base_url ) ) {
// Extract the encoded portion
$encoded = substr( $image, strlen( $private_base_url ) );
// Decode the masked URL
$decoded = aiovg_base64_decode( $encoded );
// Sanitize the real file URL
$image = aiovg_sanitize_url( $decoded );
update_post_meta( $post_id, 'is_image_uploaded', 1 );
} else {
// Direct URL entered by the user
$image = aiovg_sanitize_url( $image );
}
$image_id = attachment_url_to_postid( $image );
} else {
if ( 'youtube' == $type && ! empty( $youtube ) ) {
$image = aiovg_get_youtube_image_url( $youtube );
} elseif ( 'vimeo' == $type && ! empty( $vimeo ) ) {
$image = aiovg_get_vimeo_image_url( $vimeo, true );
} elseif ( 'dailymotion' == $type && ! empty( $dailymotion ) ) {
$image = aiovg_get_dailymotion_image_url( $dailymotion, true );
} elseif ( 'rumble' == $type && ! empty( $rumble ) ) {
$image = aiovg_get_rumble_image_url( $rumble, true );
} elseif ( 'embedcode' == $type && ! empty( $embedcode ) ) {
$image = aiovg_get_embedcode_image_url( $embedcode, true );
}
}
if ( ! empty( $featured_images_settings['enabled'] ) ) { // Set featured image
$set_featured_image = isset( $_POST['set_featured_image'] ) ? (int) $_POST['set_featured_image'] : 0;
update_post_meta( $post_id, 'set_featured_image', $set_featured_image );
if ( empty( $image ) ) {
$set_featured_image = 0;
} else {
if ( isset( $_POST['images'] ) ) { // Has images from thumbnail generator?
$images = array_map( 'aiovg_sanitize_url', $_POST['images'] );
foreach ( $images as $__image ) {
if ( $__image == $image ) {
$set_featured_image = 0;
break;
}
}
}
}
if ( ! empty( $set_featured_image ) ) {
if ( empty( $image_id ) && ! empty( $featured_images_settings['download_external_images'] ) ) {
$image_id = aiovg_create_attachment_from_external_image_url( $image, $post_id );
}
if ( ! empty( $image_id ) ) {
set_post_thumbnail( $post_id, $image_id );
}
}
}
update_post_meta( $post_id, 'image', $image );
update_post_meta( $post_id, 'image_id', $image_id );
$image_alt = isset( $_POST['image_alt'] ) ? sanitize_text_field( $_POST['image_alt'] ) : '';
update_post_meta( $post_id, 'image_alt', $image_alt );
// Subtitles
delete_post_meta( $post_id, 'track' );
if ( ! empty( $_POST['track_src'] ) ) {
$sources = $_POST['track_src'];
$sources = array_map( 'trim', $sources );
$sources = array_filter( $sources );
foreach ( $sources as $key => $source ) {
$track = array(
'src' => aiovg_sanitize_url( $source ),
'src_id' => attachment_url_to_postid( $source ),
'label' => sanitize_text_field( $_POST['track_label'][ $key ] ),
'srclang' => sanitize_text_field( $_POST['track_srclang'][ $key ] )
);
add_post_meta( $post_id, 'track', $track );
}
}
// Chapters
delete_post_meta( $post_id, 'chapter' );
if ( ! empty( $_POST['chapter_time'] ) ) {
foreach ( $_POST['chapter_time'] as $key => $value ) {
$time = sanitize_text_field( $_POST['chapter_time'][ $key ] );
$label = sanitize_text_field( $_POST['chapter_label'][ $key ] );
if ( empty( $time ) || empty( $label ) ) continue;
$chapter = array(
'time' => $time,
'label' => $label
);
add_post_meta( $post_id, 'chapter', $chapter );
}
}
// Email Capture: Check if "aiovg_video_email_capture_nonce" nonce is set
if ( isset( $_POST['aiovg_video_email_capture_nonce'] ) ) {
// Verify that the nonce is valid
if ( wp_verify_nonce( $_POST['aiovg_video_email_capture_nonce'], 'aiovg_save_video_email_capture' ) ) {
// OK to save meta data
$email_capture = isset( $_POST['email_capture'] ) ? (int) $_POST['email_capture'] : -1;
update_post_meta( $post_id, 'email_capture', $email_capture );
}
}
// Restrictions: Check if "aiovg_video_restrictions_nonce" nonce is set
if ( isset( $_POST['aiovg_video_restrictions_nonce'] ) ) {
// Verify that the nonce is valid
if ( wp_verify_nonce( $_POST['aiovg_video_restrictions_nonce'], 'aiovg_save_video_restrictions' ) ) {
// OK to save meta data
$access_control = isset( $_POST['access_control'] ) ? (int) $_POST['access_control'] : -1;
update_post_meta( $post_id, 'access_control', $access_control );
$restricted_roles = isset( $_POST['restricted_roles'] ) ? array_map( 'sanitize_text_field', $_POST['restricted_roles'] ) : array();
update_post_meta( $post_id, 'restricted_roles', $restricted_roles );
}
}
// Trailer: Check if "aiovg_video_trailer_nonce" nonce is set
if ( isset( $_POST['aiovg_video_trailer_nonce'] ) ) {
// Verify that the nonce is valid
if ( wp_verify_nonce( $_POST['aiovg_video_trailer_nonce'], 'aiovg_save_video_trailer' ) ) {
// OK to save meta data
$trailer_type = isset( $_POST['trailer_type'] ) ? sanitize_text_field( $_POST['trailer_type'] ) : '';
update_post_meta( $post_id, 'trailer_type', $trailer_type );
if ( 'embedcode' === $trailer_type ) {
$trailer_src = isset( $_POST['trailer_embedcode'] ) ? trim( wp_unslash( $_POST['trailer_embedcode'] ) ) : '';
if ( $trailer_src && filter_var( $trailer_src, FILTER_VALIDATE_URL ) ) {
$parsed = wp_parse_url( $trailer_src );
// Allow only http / https URLs
if ( isset( $parsed['scheme'] ) && in_array( $parsed['scheme'], array( 'http', 'https' ) ) ) {
$trailer_src = sprintf(
'',
esc_url( $trailer_src )
);
}
}
add_filter( 'wp_kses_allowed_html', 'aiovg_allow_iframe_script_tags' );
$trailer_src = ! empty( $trailer_src ) ? wp_kses_post( $trailer_src ) : '';
remove_filter( 'wp_kses_allowed_html', 'aiovg_allow_iframe_script_tags' );
$trailer_src_id = 0;
} else {
$trailer_src = isset( $_POST['trailer_src'] ) ? aiovg_sanitize_url( $_POST['trailer_src'] ) : '';
$trailer_src_id = attachment_url_to_postid( $trailer_src );
}
update_post_meta( $post_id, 'trailer_src', $trailer_src );
update_post_meta( $post_id, 'trailer_src_id', $trailer_src_id );
}
}
}
}
return $post_id;
}
/**
* Print footer scripts.
*
* @since 4.0.1
*/
public function print_footer_scripts() {
if ( ! current_user_can( 'manage_aiovg_options' ) ) {
return false;
}
global $pagenow, $typenow;
if ( ! in_array( $pagenow, array( 'post-new.php', 'post.php' ) ) || 'aiovg_videos' != $typenow ) {
return false;
}
// Export Emails button — edit screen only, when email capture is globally enabled
if ( 'post.php' == $pagenow ) {
$email_capture_settings = aiovg_get_option( 'aiovg_email_capture_settings' );
if ( ! empty( $email_capture_settings['enable_email_capture'] ) ) {
global $post;
$post_id = isset( $post ) ? (int) $post->ID : 0;
if ( $post_id > 0 ) {
?>
'aiovg_videos',
'posts_per_page' => 1,
'fields' => 'ids',
'no_found_rows' => true,
'update_post_term_cache' => false,
'update_post_meta_cache' => false
);
$aiovg_query = new WP_Query( $args );
if ( $aiovg_query->have_posts() ) {
$automatic_tour_enabled = 0;
}
}
$l10n = array(
'take_a_guided_tour' => __( 'Take a Guided Tour', 'all-in-one-video-gallery' ),
'progress_text' => sprintf( __( '%s of %s', 'all-in-one-video-gallery' ), '{{current}}', '{{total}}' ),
'next_btn_text' => __( 'Next →', 'all-in-one-video-gallery' ),
'prev_btn_text' => __( '← Previous', 'all-in-one-video-gallery' ),
'done_btn_text' => __( 'Done', 'all-in-one-video-gallery' ),
);
$steps = array(
array(
'popover' => array(
'title' => __( 'Welcome to the Quick Tour', 'all-in-one-video-gallery' ),
'description' => __( 'This form lets you add or edit videos for your gallery.
Let\'s walk through the key steps to get your first video published.', 'all-in-one-video-gallery' )
)
),
array(
'element' => '#title',
'popover' => array(
'title' => __( 'Video Title', 'all-in-one-video-gallery' ),
'description' => __( 'Start by entering a clear, descriptive title for your video.
This helps visitors (and search engines) understand what your video is about.', 'all-in-one-video-gallery' )
)
),
array(
'element' => '#postdivrich',
'popover' => array(
'title' => __( 'Video Description', 'all-in-one-video-gallery' ),
'description' => __( 'Next, add a description for your video.
This is optional, but highly recommended, as it helps with SEO, provides context to your audience, and even shows up when sharing videos on social media.', 'all-in-one-video-gallery' )
)
),
array(
'element' => '#aiovg-field-type',
'popover' => array(
'title' => __( 'Source Type', 'all-in-one-video-gallery' ),
'description' => __( 'Choose where your video is hosted — YouTube, Vimeo, Self-Hosted, or another source.
This helps the plugin know how to handle your video.', 'all-in-one-video-gallery' )
)
),
array(
'element' => '%%video-field%%',
'popover' => array(
'title' => __( 'Video File Input', 'all-in-one-video-gallery' ),
'description' => __( 'Depending on the source you selected, either upload a video file or paste the video URL.', 'all-in-one-video-gallery' )
)
),
array(
'element' => '#aiovg-field-image',
'popover' => array(
'title' => __( 'Poster Image', 'all-in-one-video-gallery' ),
'description' => sprintf(
__( 'Upload a poster image for your video.
This image appears in the gallery and before the video plays.
Leave this field empty for YouTube, Vimeo, Dailymotion, and Rumble to automatically fetch thumbnails.
Want automatic thumbnails for self-hosted videos? Check out our Premium Add-on.', 'all-in-one-video-gallery' ),
'https://plugins360.com/all-in-one-video-gallery/auto-thumbnail-generator/'
)
)
),
array(
'element' => '#aiovg_categoriesdiv',
'popover' => array(
'title' => __( 'Video Categories', 'all-in-one-video-gallery' ),
'description' => __( 'Assign your video to categories to help visitors find related content.
Need a new category? Just click "+ Add New Category" to create one.', 'all-in-one-video-gallery' )
)
),
array(
'element' => '#tagsdiv-aiovg_tags',
'popover' => array(
'title' => __( 'Video Tags', 'all-in-one-video-gallery' ),
'description' => __( 'Add tags to describe your video in more detail.
Tags work like keywords and help visitors find similar videos.', 'all-in-one-video-gallery' )
)
),
array(
'element' => '#publish',
'popover' => array(
'title' => __( 'Save Your Video', 'all-in-one-video-gallery' ),
'description' => __( 'All set? Great!
Click "Publish" to save your video.
Repeat these steps to add as many videos as you want.', 'all-in-one-video-gallery' )
)
),
array(
'element' => '#toplevel_page_all-in-one-video-gallery',
'popover' => array(
'title' => __( 'Next Steps', 'all-in-one-video-gallery' ),
'description' => sprintf(
__( 'That\'s it — you\'re all set!
Use the menu on the left to manage your Videos, Categories, and Tags. You can also customize the plugin in Settings.
To display your videos on a page:
Simply add this shortcode to any page or post: [aiovg_videos filters="all"]
Want to customize how your gallery looks? Check out this guide to explore all the display options.', 'all-in-one-video-gallery' ),
'https://plugins360.com/all-in-one-video-gallery/displaying-video-gallery/'
),
'align' => 'center'
)
)
);
?>
__( "All Categories", 'all-in-one-video-gallery' ),
'option_none_value' => 0,
'taxonomy' => 'aiovg_categories',
'name' => 'aiovg_categories',
'orderby' => 'name',
'selected' => isset( $wp_query->query['aiovg_categories'] ) ? $wp_query->query['aiovg_categories'] : '',
'hierarchical' => true,
'depth' => 3,
'show_count' => false,
'hide_empty' => false,
));
// Restrict by custom filtering options
if ( current_user_can( 'manage_aiovg_options' ) ) {
$selected = isset( $_GET['aiovg_filter'] ) ? sanitize_text_field( $_GET['aiovg_filter'] ) : '';
$options = array(
'' => __( 'All Videos', 'all-in-one-video-gallery' ),
'featured' => __( 'Featured Only', 'all-in-one-video-gallery' )
);
$options = apply_filters( 'aiovg_admin_videos_custom_filters', $options );
echo '';
}
}
}
/**
* Parse a query string and filter listings accordingly.
*
* @since 1.0.0
* @param WP_Query $query WordPress Query object.
*/
public function parse_query( $query ) {
global $pagenow, $post_type;
if ( ! $query->is_main_query() ) {
return;
}
if ( 'edit.php' == $pagenow && 'aiovg_videos' == $post_type ) {
// Search by ID using "id:123" prefix
if ( isset( $query->query_vars['s'] ) ) {
$s = trim( $query->query_vars['s'] );
if ( preg_match( '/^id:\s*(\d+)$/i', $s, $matches ) ) {
$query->query_vars['p'] = (int) $matches[1];
$query->query_vars['s'] = '';
}
}
// Convert category id to taxonomy term in query
if ( isset( $query->query_vars['aiovg_categories'] ) && ctype_digit( $query->query_vars['aiovg_categories'] ) && 0 != $query->query_vars['aiovg_categories'] ) {
$term = get_term_by( 'id', $query->query_vars['aiovg_categories'], 'aiovg_categories' );
$query->query_vars['aiovg_categories'] = $term->slug;
}
// Convert tag id to taxonomy term in query
if ( isset( $query->query_vars['aiovg_tags'] ) && ctype_digit( $query->query_vars['aiovg_tags'] ) && 0 != $query->query_vars['aiovg_tags'] ) {
$term = get_term_by( 'id', $query->query_vars['aiovg_tags'], 'aiovg_tags' );
$query->query_vars['aiovg_tags'] = $term->slug;
}
// Set featured meta in query
$query->query_vars['meta_query'] = array(
'relation' => 'AND'
);
if ( isset( $_GET['aiovg_filter'] ) && 'featured' == $_GET['aiovg_filter'] ) {
$query->query_vars['meta_query']['featured'] = array(
'key' => 'featured',
'value' => 1
);
}
// Sort by views
if ( isset( $_GET['orderby'] ) && 'views' == $_GET['orderby'] ) {
$query->query_vars['meta_query']['views'] = array(
'relation' => 'OR',
array(
'key' => 'views',
'compare' => 'NOT EXISTS'
),
array(
'key' => 'views',
'compare' => 'EXISTS'
)
);
$query->query_vars['orderby'] = 'views';
}
}
}
/**
* Filters the array of row action links.
*
* @since 2.5.1
* @param array $actions An array of row action links.
* @param WP_Post $post The post object.
* @return array Filtered array of row action links.
*/
public function row_actions( $actions, $post ) {
if ( $post->post_type == 'aiovg_videos' ) {
// Copy URL
$copy_shortcode = sprintf(
'%s',
get_permalink( $post->ID ),
esc_html__( 'Copy URL', 'all-in-one-video-gallery' )
);
$actions['copy-url'] = $copy_shortcode;
// Copy Shortcode
$copy_shortcode = sprintf(
'%s',
$post->ID,
esc_html__( 'Copy Shortcode', 'all-in-one-video-gallery' )
);
$actions['copy-shortcode'] = $copy_shortcode;
// Export Emails
if ( current_user_can( 'manage_aiovg_options' ) ) {
$email_capture_settings = aiovg_get_option( 'aiovg_email_capture_settings' );
if ( ! empty( $email_capture_settings['enable_email_capture'] ) ) {
$actions['export-emails'] = sprintf(
'%s',
$post->ID,
esc_html__( 'Export Emails', 'all-in-one-video-gallery' )
);
}
}
}
return $actions;
}
/**
* Retrieve the table columns.
*
* @since 1.0.0
* @param array $columns Array of default table columns.
* @return array Filtered columns array.
*/
public function get_columns( $columns ) {
$columns = aiovg_insert_array_after( 'cb', $columns, array(
'image' => ''
));
$columns = aiovg_insert_array_after( 'taxonomy-aiovg_tags', $columns, array(
'post_meta' => __( 'Metadata', 'all-in-one-video-gallery' ),
'post_id' => __( 'ID', 'all-in-one-video-gallery' )
));
$columns['taxonomy-aiovg_categories'] = __( 'Categories', 'all-in-one-video-gallery' );
$columns['taxonomy-aiovg_tags'] = __( 'Tags', 'all-in-one-video-gallery' );
return $columns;
}
/**
* Retrieve the sortable table columns.
*
* @since 2.5.1
* @param array $columns Array of default sortable columns.
* @return array Filtered sortable columns array.
*/
public function sortable_columns( $columns ) {
$columns['post_id'] = 'post_id';
return $columns;
}
/**
* This function renders the custom columns in the list table.
*
* @since 1.0.0
* @param string $column The name of the column.
* @param string $post_id Post ID.
*/
public function custom_column_content( $column, $post_id ) {
switch ( $column ) {
case 'image':
$image_data = aiovg_get_image( $post_id, 'thumbnail', 'post', true );
printf(
'',
$image_data['src']
);
break;
case 'post_meta':
$meta = array();
// Views
$views = (int) get_post_meta( $post_id, 'views', true );
$meta[] = sprintf(
' ',
esc_html__( 'Views', 'all-in-one-video-gallery' ),
$views
);
// Likes
$likes = (int) get_post_meta( $post_id, 'likes', true );
$meta[] = sprintf(
' ',
esc_html__( 'Likes', 'all-in-one-video-gallery' ),
$likes
);
// Dislikes
$dislikes = (int) get_post_meta( $post_id, 'dislikes', true );
$meta[] = sprintf(
' ',
esc_html__( 'Dislikes', 'all-in-one-video-gallery' ),
$dislikes
);
// Featured
if ( current_user_can( 'manage_aiovg_options' ) ) {
$value = get_post_meta( $post_id, 'featured', true );
$meta[] = sprintf(
' ',
esc_html__( 'Featured', 'all-in-one-video-gallery' ),
( 1 == $value ? '✓' : '✗' )
);
}
echo '