X7ROOT File Manager
Current Path:
/var/softaculous/sitepad/editor/site-data/plugins/siteseo-pro/main
var
/
softaculous
/
sitepad
/
editor
/
site-data
/
plugins
/
siteseo-pro
/
main
/
??
..
??
admin.php
(15.5 KB)
??
ai.php
(9.16 KB)
??
ajax.php
(30.77 KB)
??
breadcrumbs.php
(7.68 KB)
??
googleconsole.php
(37.28 KB)
??
googlenews.php
(3.79 KB)
??
gscsetup.php
(13.8 KB)
??
importschema.php
(4.26 KB)
??
install.php
(2.54 KB)
??
llmtxtfile.php
(2.76 KB)
??
plugin-update-checker.php
(52.57 KB)
??
redirectmanager.php
(6.9 KB)
??
registerblocks.php
(1.57 KB)
??
rsssitemap.php
(6.95 KB)
??
settings
??
structureddata.php
(49.52 KB)
??
tags.php
(14.13 KB)
??
videositemap.php
(13.7 KB)
Editing: videositemap.php
<?php /* * SITESEO * https://siteseo.io * (c) SITSEO Team */ namespace SiteSEOPro; if(!defined('ABSPATH')){ die('Hacking Attempt !'); } class VideoSitemap{ private static $paged = 1; static function display_metabox(){ global $post; $allowed_suggestion_tags = array( 'button' => array( 'class' => array(), 'type' => array(), ), 'span' => array( 'id' => array(), 'class' => array(), ), 'div' => array( 'class' => array(), 'style' => array(), ), 'input' => array( 'type' => array(), 'class' => true, 'placeholder' => true, ) ); $exclude_post = !empty(get_post_meta($post->ID, '_siteseo_exclude_post')) ? get_post_meta($post->ID, '_siteseo_exclude_post', true) : ''; $video_title = !empty(get_post_meta($post->ID, '_siteseo_video_title', true)) ? get_post_meta($post->ID, '_siteseo_video_title', true) : ''; $video_description = !empty(get_post_meta($post->ID, '_siteseo_video_description', true)) ? get_post_meta($post->ID, '_siteseo_video_description', true) : ''; $video_thumbnail = !empty(get_post_meta($post->ID, '_siteseo_video_thumbnail', true)) ? get_post_meta($post->ID, '_siteseo_video_thumbnail', true) : ''; $video_duration = !empty(get_post_meta($post->ID, '_siteseo_video_duration', true)) ? get_post_meta($post->ID, '_siteseo_video_duration', true) : ''; $video_rating = !empty(get_post_meta($post->ID, '_siteseo_video_rating', true)) ? get_post_meta($post->ID, '_siteseo_video_rating', true) : ''; echo'<div class="siteseo-metabox-option-wrap"> <div class="siteseo-metabox-label-wrap"> <label for="siteseo_exclude_post">'.esc_html__('Exclude this post', 'siteseo-pro').'</label> </div> <div class="siteseo-metabox-input-wrap"> <input type="checkbox" name="siteseo_exclude_post" '.(!empty($exclude_post) ? 'checked' : '').'/>'.esc_html__('Exclude this post form video sitemap', 'siteseo-pro').' </div> </div> <div class="siteseo-metabox-option-wrap"> <div class="siteseo-metabox-label-wrap"> <label for="siteseo_video_title">'.esc_html__('Video Title:', 'siteseo-pro').'</label> </div> <div class="siteseo-metabox-input-wrap"> <input type="text" id="siteseo_titles_title_meta" class="siteseo_titles_title_meta" name="siteseo_video_title" value="'.esc_attr($video_title) .'" class="widefat"> <span class="description"></span> <div class="siteseo-metabox-tags"> <button type="button" class="siteseo-metabox-tag" data-tag="%%post_title%%"><span class="dashicons dashicons-plus"></span> Post Title</button> <button type="button" class="siteseo-metabox-tag" data-tag="%%sitetitle%%"><span class="dashicons dashicons-plus"></span> Site Title</button> <button type="button" class="siteseo-metabox-tag" data-tag="%%sep%%"><span class="dashicons dashicons-plus"></span>Seperator</button>'.wp_kses(siteseo_suggestion_button_metabox(), $allowed_suggestion_tags).' </div> </div> </div> <div class="siteseo-metabox-option-wrap"> <div class="siteseo-metabox-label-wrap"> <label for="siteseo_video_description">'.esc_html__('Video Description', 'siteseo-pro').'</label> </div> <div class="siteseo-metabox-input-wrap"> <textarea id="siteseo_titles_desc_meta" name="siteseo_video_description" class="widefat" rows="3">'.esc_textarea($video_description) .'</textarea> <div class="siteseo-metabox-tags"> <button type="button" class="siteseo-metabox-tag" data-tag="%%post_excerpt%%"> <span class="dashicons dashicons-plus"></span>Post Excerpt</button>'.wp_kses(siteseo_suggestion_button_metabox(), $allowed_suggestion_tags).' </div> </div> </div> <div class="siteseo-metabox-option-wrap"> <div class="siteseo-metabox-label-wrap"> <label for="siteseo_video_thumbnail">'.esc_html__('Thumbnail Video:', 'siteseo-pro').'</label> </div> <div class="siteseo-metabox-input-wrap"> <input type="url" id="siteseo_video_thumbnail" name="siteseo_video_thumbnail" value="'.esc_attr($video_thumbnail).'" class="widefat"> <button type="button" class="button siteseo-video-thumbnail-upload">'.esc_html__('Upload Thumbnail', 'siteseo-pro').'</button> </div> </div> <div class="siteseo-metabox-option-wrap"> <div class="siteseo-metabox-label-wrap"> <label for="siteseo_video_duration">'.esc_html__('Duration (seconds):', 'siteseo-pro').'</label> </div> <div class="siteseo-metabox-input-wrap"> <input type="number" name="siteseo_video_duration" value="'.esc_attr($video_duration).'" min="0"> <span class="description">'.esc_html__('Video duration in seconds (e.g., 180 for 3 minutes)', 'siteseo-pro').'</span> </div> </div> <div class="siteseo-metabox-option-wrap"> <div class="siteseo-metabox-label-wrap"> <label for="siteseo_video_rating">'.esc_html__('Video Rating', 'siteseo-pro').'</label> </div> <div class="siteseo-metabox-input-wrap"> <input type="number" name="siteseo_video_rating" value="'.esc_attr($video_rating).'" > <span class="description">'.esc_html__('Allowed values are float numbers in the range 0.0 to 5.0.', 'siteseo-pro').'</span> </div> </div>'; } static function save_video_sitemap($post_id, $post){ if(!isset($_POST['siteseo_metabox_nonce']) || !wp_verify_nonce(sanitize_text_field($_POST['siteseo_metabox_nonce']), 'siteseo_metabox_nonce')){ return $post_id; } //Post type object $post_type = get_post_type_object($post->post_type); //Check permission if(!current_user_can($post_type->cap->edit_post, $post_id)){ return $post_id; } if(isset($_POST['siteseo_exclude_post'])){ update_post_meta($post_id, '_siteseo_exclude_post', sanitize_text_field($_POST['siteseo_exclude_post'])); } else{ delete_post_meta($post_id, '_siteseo_exclude_post'); } if(isset($_POST['siteseo_video_title'])){ update_post_meta($post_id, '_siteseo_video_title', sanitize_text_field($_POST['siteseo_video_title'])); } else{ delete_post_meta($post_id, '_siteseo_video_title'); } if(isset($_POST['siteseo_video_description'])){ update_post_meta($post_id, '_siteseo_video_description', sanitize_text_field($_POST['siteseo_video_description'])); } else{ delete_post_meta($post_id, '_siteseo_video_description'); } if(isset($_POST['siteseo_video_thumbnail'])){ update_post_meta($post_id, '_siteseo_video_thumbnail', sanitize_text_field($_POST['siteseo_video_thumbnail'])); } else{ delete_post_meta($post_id, '_siteseo_video_thumbnail'); } if(isset($_POST['siteseo_video_duration'])){ update_post_meta($post_id, '_siteseo_video_duration', sanitize_text_field($_POST['siteseo_video_duration'])); } else{ delete_post_meta($post_id, '_siteseo_video_duration'); } if(isset($_POST['siteseo_video_rating'])){ update_post_meta($post_id, '_siteseo_video_rating', sanitize_text_field($_POST['siteseo_video_rating'])); } else{ delete_post_meta($post_id, '_siteseo_video_rating'); } } static function render_sitemap(){ global $siteseo; if(empty($siteseo->pro['toggle_state_video_sitemap']) || empty($siteseo->pro['enable_video_sitemap'])){ return; } $selected_post_types = isset($siteseo->pro['video_sitemap_posts']) ? $siteseo->pro['video_sitemap_posts'] : []; header('Content-Type: application/xml; charset=utf-8'); $offset = (1000*(self::$paged - 1)); if(get_option('permalink_structure')){ $xsl_url = home_url('/sitemaps.xsl'); } else{ $xsl_url = home_url('/?sitemaps-stylesheet=sitemap'); } echo'<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="'.esc_url($xsl_url).'" ?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">'; if(!empty($selected_post_types)){ $args = [ 'post_type' => $selected_post_types, 'post_status' => 'publish', 'numberposts' => 1000, 'offset' => $offset, 'meta_query' => [ [ 'key' => '_siteseo_robots_index', 'compare' => 'NOT EXISTS' ], [ 'key' => '_siteseo_video_disabled', 'compare' => 'NOT EXISTS' ] ] ]; $posts = get_posts($args); foreach($posts as $post){ $exclude_post = !empty(get_post_meta($post->ID, '_siteseo_exclude_post', true)) ? get_post_meta($post->ID, '_siteseo_exclude_post', true) : ''; if(!empty($exclude_post)){ continue; } $video_urls = []; $post_content = $post->post_content; preg_match_all('#(https?://)?(www\.)?(youtube|youtu|youtube-nocookie)\.(com|be)/(watch\?v=|embed/|v/|.+\?v=)?([^&"\'\s]+)#i', $post_content, $youtube_matches); if(!empty($youtube_matches[6])){ foreach($youtube_matches[6] as $video_id){ $video_urls[] = 'https://www.youtube.com/watch?v=' . $video_id; } } preg_match_all('#(https?://)?(www\.)?vimeo\.com/([0-9]+)#i', $post_content, $vimeo_matches); if(!empty($vimeo_matches[3])){ foreach($vimeo_matches[3] as $video_id){ $video_urls[] = 'https://vimeo.com/' . $video_id; } } //(mp4, webm, etc.) preg_match_all('#https?://[^\s\'"]+\.(mp4|webm|ogg|mov|avi|wmv|flv)#i', $post_content, $direct_matches); if(!empty($direct_matches[0])){ $video_urls = array_merge($video_urls, $direct_matches[0]); } $video_urls = array_unique($video_urls); if(empty($video_urls)){ continue; } $post_title = get_the_title($post->ID); $post_excerpt = get_the_excerpt($post->ID); $post_thumbnail = get_the_post_thumbnail_url($post->ID, 'medium'); $video_thumbnail = !empty(get_post_meta($post->ID, '_siteseo_video_thumbnail', true)) ? get_post_meta($post->ID, '_siteseo_video_thumbnail', true) : ($post_thumbnail ? $post_thumbnail : ''); $get_video_title = !empty(get_post_meta($post->ID, '_siteseo_video_title', true)) ? get_post_meta($post->ID, '_siteseo_video_title', true) : $post_title; $video_title = \SiteSEO\TitlesMetas::replace_variables($get_video_title); $get_video_description = !empty(get_post_meta($post->ID, '_siteseo_video_description', true)) ? get_post_meta($post->ID, '_siteseo_video_description', true) : (!empty($post_excerpt) ? $post_excerpt : $post_title); $video_description = \SiteSEO\TitlesMetas::replace_variables($get_video_description); $video_duration = !empty(get_post_meta($post->ID, '_siteseo_video_duration', true)) ? get_post_meta($post->ID, '_siteseo_video_duration', true) : ''; $video_rating = !empty(get_post_meta($post->ID, '_siteseo_video_rating', true)) ? get_post_meta($post->ID, '_siteseo_video_rating', true) : ''; echo "\t".'<url> <loc>'.esc_url(urldecode(get_permalink($post->ID))).'</loc> <lastmod>'.esc_html(get_the_modified_date('c', $post->ID)).'</lastmod>'; foreach($video_urls as $video_url){ if(empty($video_url)) { continue; } echo'<video:video>'; if(!empty($video_thumbnail)){ echo'<video:thumbnail_loc>'.esc_url($video_thumbnail).'</video:thumbnail_loc>'; } echo'<video:title>'.esc_xml($video_title).'</video:title>'; echo'<video:description>'.esc_xml($video_description).'</video:description>'; if(strpos($video_url, 'youtube.com') !== false || strpos($video_url, 'youtu.be') !== false){ echo'<video:player_loc allow_embed="yes" autoplay="ap=1">'.esc_url($video_url).'</video:player_loc>'; } else{ echo'<video:content_loc>'.esc_url($video_url).'</video:content_loc>'; } if(!empty($video_duration)){ echo'<video:duration>'.esc_xml($video_duration).'</video:duration>'; } if(!empty($video_rating)){ echo'<video:rating>'.esc_xml($video_rating).'</video:rating>'; } echo'</video:video>'; } echo'</url>'; } } echo '</urlset>'; exit; } static function render_video_xsl(){ $video_thumbnail_txt = __('Video', 'siteseo-pro'); $video_title_txt = __('Video Title', 'siteseo-pro'); $video_description_txt = __('Description', 'siteseo-pro'); $video_duration_txt = __('Duration', 'siteseo-pro'); $video_url_txt = __('Video URL', 'siteseo-pro'); return '<!-- Video Sitemap --> <thead> <tr> <th>'.esc_xml($video_thumbnail_txt).'</th> <th>'.esc_xml($video_title_txt).'</th> <th>'.esc_xml($video_description_txt).'</th> <th>'.esc_xml($video_duration_txt).'</th> <th>'.esc_xml($video_url_txt).'</th> </tr> </thead> <tbody> <xsl:for-each select="sitemap:urlset/sitemap:url/video:video"> <tr> <td> <xsl:if test="video:thumbnail_loc"> <img class="siteseo-video-thumbnail" src="{video:thumbnail_loc}" alt="Video Thumbnail"/> </xsl:if> </td> <td> <div class="siteseo-video-title"><xsl:value-of select="video:title"/></div> <div class="siteseo-video-meta"> <xsl:if test="video:publication_date"> Published: <xsl:value-of select="video:publication_date"/> </xsl:if> <xsl:if test="video:duration"> | Duration: <xsl:value-of select="video:duration"/> sec </xsl:if> </div> </td> <td> <div class="siteseo-video-description"> <xsl:value-of select="video:description"/> </div> </td> <td> <xsl:if test="video:duration"> <xsl:value-of select="video:duration"/> sec </xsl:if> </td> <td> <div class="siteseo-video-url"> <xsl:choose> <xsl:when test="video:player_loc"> <a href="{video:player_loc}" target="_blank">Watch Video</a> </xsl:when> <xsl:when test="video:content_loc"> <a href="{video:content_loc}" target="_blank">Video File</a> </xsl:when> <xsl:otherwise> No URL available </xsl:otherwise> </xsl:choose> </div> </td> </tr> </xsl:for-each> </tbody>'; } }
Upload File
Create Folder