query_vars['post_type']) || $query->query_vars['post_type'] !== 'attachment') { return $query; } if (!empty($query->query_vars['wpmf_gallery']) || !empty($query->query_vars['wpmf_download_folder'])) { return $query; } $orderby = 'date'; $order = 'DESC'; $sort_media = 'all'; if ($pagenow === 'upload.php') { if (!empty($_COOKIE['media-order-media' . $host])) { $sort_media = $_COOKIE['media-order-media' . $host]; } if (isset($_GET['media-order-media'])) { $sort_media = $_GET['media-order-media']; } if ($sort_media === 'custom') { $query->set('meta_key', 'wpmf_order'); $orderby = 'meta_value_num'; $order = 'ASC'; } else { if ($sort_media !== 'all') { $sorts = explode('|', $sort_media); $orderby = $sorts[0]; $order = $sorts[1]; } } if (!empty($_GET['orderby'])) { $orderby = $_GET['orderby']; } if (!empty($_GET['order'])) { $order = $_GET['order']; } if ($orderby === 'size') { $query->set('meta_key', 'wpmf_size'); $query->set('orderby', 'meta_value_num'); $query->set('order', $order); } elseif ($orderby === 'filetype') { $query->set('meta_key', 'wpmf_filetype'); $query->set('orderby', 'meta_value'); $query->set('order', $order); } else { $query->set('orderby', $orderby); $query->set('order', $order); } } else { if (isset($_REQUEST['query']['meta_key']) && isset($_REQUEST['query']['wpmf_orderby'])) { $query->query_vars['meta_key'] = $_REQUEST['query']['meta_key']; $query->query_vars['orderby'] = $_REQUEST['query']['wpmf_orderby']; } $query->query_vars['ignore_custom_sort'] = true; } global $pagenow; $dates = array(); if (!isset($_GET['attachment_dates']) && !isset($_REQUEST['query']['wpmf_date'])) { if (isset($_COOKIE['wpmf_wpmf_date' . $host]) && $_COOKIE['wpmf_wpmf_date' . $host] !== '' && $_COOKIE['wpmf_wpmf_date' . $host] !== 'all') { $dates = explode(',', $_COOKIE['wpmf_wpmf_date' . $host]); } } else { if ($pagenow === 'upload.php') { if (isset($_GET['attachment_dates'])) { $dates = explode(',', $_GET['attachment_dates']); } } else { if (!empty($_REQUEST['query']['wpmf_date'])) { $dates = explode(',', $_REQUEST['query']['wpmf_date']); } } } if (!empty($dates)) { $date_query = array(); if (!empty($dates)) { $date_query['relation'] = 'OR'; foreach ($dates as $date) { if ((int)$date !== 0 && strlen($date) > 4) { $year = substr($date, 0, 4); $month = substr($date, 4, 2); $date_query[] = array( 'year' => $year, 'month' => $month ); } } $query->query_vars['date_query'] = $date_query; } } $user_id = get_current_user_id(); $filetype = array('all'); // Load file type from $query->query_vars // When run WP_Query from other plugin/theme // ex: $media_attachments_query = new WP_Query( 'post_type=attachment&post_mime_type=oembed/gallery&posts_per_page=-1&post_status=any' ); if (isset($query->query_vars['post_mime_type'])) { if (is_array($query->query_vars['post_mime_type'])) { $filetype = $query->query_vars['post_mime_type']; } else { $filetype = explode(',', $query->query_vars['post_mime_type']); } } elseif (!isset($_GET['attachment_types']) && !isset($_REQUEST['query']['post_mime_type'])) { // load file type filter from cookie if (isset($_COOKIE['wpmf_post_mime_type' . $host]) && $_COOKIE['wpmf_post_mime_type' . $host] !== '' && $_COOKIE['wpmf_post_mime_type' . $host] !== 'all') { $filetype = $_COOKIE['wpmf_post_mime_type' . $host]; if ($filetype !== '') { $filetype = explode(',', $filetype); } } if (in_array('trash', $filetype) && $pagenow === 'upload.php') { $filetype = array(); } } else { // load file type filter from url if (!empty($_GET['attachment_types'])) { $filetype = explode(',', $_GET['attachment_types']); } // load file type filter from ajax params if (!empty($_REQUEST['query']['post_mime_type'])) { if (is_array($_REQUEST['query']['post_mime_type'])) { $filetype = $_REQUEST['query']['post_mime_type']; } else { $filetype = explode(',', $_REQUEST['query']['post_mime_type']); } } } if (in_array('mine', $filetype)) { $query->set('author', $user_id); } if (!empty($filetype)) { if (is_array($filetype) && in_array('all', $filetype)) { $query->query_vars['post_mime_type'] = ''; return $query; } $extensions = array(); $mimetypes = array(); foreach ($filetype as $ft) { $ft = str_replace('post_mime_type:', '', $ft); if (strpos($ft, 'application/') !== false) { $extensions = array_merge($extensions, array('application')); $mimetypes[] = $ft; } if ($ft === 'unattached' || $ft === 'detached') { $query->query_vars['post_parent'] = 0; } if ($ft === 'trash') { $query->query_vars['post_status'] = 'trash'; } if ($ft === 'uploaded') { $query->query_vars['post_parent'] = $_REQUEST['post_id']; } if ($ft === 'mine') { $query->query_vars['author'] = $user_id; } switch ($ft) { case 'audio': $extensions = array_merge($extensions, wp_get_audio_extensions()); break; case 'video': $extensions = array_merge($extensions, wp_get_video_extensions(), array('mpg', 'mov', 'avi', 'wmv', '3gp', '3g2')); break; case 'image': $extensions = array_merge($extensions, array('jpg', 'jpeg', 'jpe', 'gif', 'png', 'webp', 'svg', 'heic', 'heif', 'avif')); break; case 'wpmf-pdf': $extensions = array_merge($extensions, array('pdf')); break; case 'wpmf-other': $extensions = array_merge($extensions, array( 'tiff', 'tif', 'ico', 'asf', 'asx', 'wmv', 'wmx', 'wm', 'avi', 'divx', 'flv', 'mov', 'qt', 'mpeg', 'mpg', 'mpe', 'm4v', 'ogv', 'webm', 'mkv', '3gp', '3gpp', '3g2', '3gp2', 'txt', 'asc', 'c', 'cc', 'h', 'srt', 'csv', 'tsv', 'ics', 'rtx', 'css', 'html', 'htm', 'vtt', 'dfxp', 'm4a', 'm4b', 'ra', 'ram', 'ogg', 'oga', 'mid', 'midi', 'wma', 'wax', 'mka', 'rtf', 'js', 'class', 'gz', '7z', 'psd', 'xcf', 'doc', 'pot', 'pps', 'ppt', 'wri', 'xla', 'xls', 'xlt', 'xlw', 'mdp', 'mpp', 'docx', 'docm', 'dotx', 'xlsx', 'xlsm', 'xlsb', 'xltx', 'xltm', 'xlam', 'pptx', 'pptm', 'ppsx', 'ppsm', 'potx', 'potm', 'ppam', 'sldx', 'sldm', 'onetoc', 'onetoc2', 'onetmp', 'onepkg', 'oxps', 'xps', 'odt', 'odp', 'ods', 'odg', 'odc', 'odb', 'odf', 'wp', 'wpd', 'key', 'numbers', 'pages' )); break; default: $mimetypes[] = $ft; break; } } if (!empty($extensions)) { foreach ($extensions as $extension) { if ($extension !== 'application') { $mimetype = WpmfHelper::getMimeType($extension); $mimetypes[] = $mimetype; } } if (!empty($mimetypes)) { $query->query_vars['post_mime_type'] = $mimetypes; } } else { if (!empty($filetype) && is_array($filetype) && ($filetype[0] === 'unattached' || $filetype[0] === 'detached' || $filetype[0] === 'uploaded' || $filetype[0] === 'trash')) { $query->query_vars['post_mime_type'] = ''; } if (!empty($filetype) && is_array($filetype) && $filetype[0] === 'mine') { $query->query_vars['author'] = $user_id; $query->query_vars['post_mime_type'] = ''; } } } // phpcs:enable return $query; } /** * Add size column and filetype column * * @param array $columns An array of columns displayed in the Media list table. * * @return array $columns */ public static function manageMediaColumns($columns) { $columns['wpmf_size'] = __('Size', 'wpmf'); $columns['wpmf_filetype'] = __('File type', 'wpmf'); $columns['wpmf_iptc'] = __('IPTC Meta', 'wpmf'); return $columns; } /** * Register sortcolumn * * @param array $columns An array of sort columns. * * @return array $columns */ public function imwidthColumnRegisterSortable($columns) { $columns['wpmf_size'] = 'size'; $columns['wpmf_filetype'] = 'filetype'; return $columns; } /** * Get size and filetype of attachment * * @param integer $pid Id of attachment * * @return array $wpmf_size_filetype */ public function getSizeFiletype($pid) { $wpmf_size_filetype = array(); // get path file $filepath = get_attached_file($pid); $info = pathinfo($filepath); // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Ignore warning php if file not exist or not have permission if (@file_exists($filepath)) { // get size $size = filesize($filepath); // get file type $filetype = wp_check_filetype($filepath); $ext = $filetype['ext']; } else { $size = get_post_meta($pid, 'wpmf_size', true); if (empty($size)) { $size = 0; } if (isset($info['extension'])) { $ext = $info['extension']; } else { $ext = ''; } } $wpmf_size_filetype['size'] = $size; $wpmf_size_filetype['ext'] = $ext; return $wpmf_size_filetype; } /** * Get size and filetype of attachment * * @param string $column_name Column name * @param integer $id Id of attachment * * @return void */ public function manageMediaCustomColumn($column_name, $id) { $wpmf_size_filetype = $this->getSizeFiletype($id); $size = $wpmf_size_filetype['size']; $ext = $wpmf_size_filetype['ext']; if ($size < 1024 * 1024) { $size = round($size / 1024, 1) . ' kB'; } elseif ($size > 1024 * 1024) { $size = round($size / (1024 * 1024), 1) . ' MB'; } switch ($column_name) { case 'wpmf_size': echo esc_html($size); break; case 'wpmf_filetype': echo esc_html($ext); break; case 'wpmf_iptc': $iptc = get_post_meta($id, 'wpmf_iptc', true); $iptchtml = ''; if (!empty($iptc)) { $iptcHeaderArray = getIptcHeader(); $iptchtml .= '
'; foreach ($iptc as $code => $iptcValue) { $iptchtml .= '' . $iptcHeaderArray[$code] . ': '. implode(',', $iptcValue) .'
'; } $iptchtml .= '
'; } // phpcs:ignore WordPress.Security.EscapeOutput -- Content already escaped in the method echo $iptchtml; break; } } }