WordPress Version: 6.3
/**
* Converts MIME types into SQL.
*
* @since 2.5.0
*
* @param string|string[] $post_mime_types List of mime types or comma separated string
* of mime types.
* @param string $table_alias Optional. Specify a table alias, if needed.
* Default empty.
* @return string The SQL AND clause for mime searching.
*/
function wp_post_mime_type_where($post_mime_types, $table_alias = '')
{
$where = '';
$wildcards = array('', '%', '%/%');
if (is_string($post_mime_types)) {
$post_mime_types = array_map('trim', explode(',', $post_mime_types));
}
$wheres = array();
foreach ((array) $post_mime_types as $mime_type) {
$mime_type = preg_replace('/\s/', '', $mime_type);
$slashpos = strpos($mime_type, '/');
if (false !== $slashpos) {
$mime_group = preg_replace('/[^-*.a-zA-Z0-9]/', '', substr($mime_type, 0, $slashpos));
$mime_subgroup = preg_replace('/[^-*.+a-zA-Z0-9]/', '', substr($mime_type, $slashpos + 1));
if (empty($mime_subgroup)) {
$mime_subgroup = '*';
} else {
$mime_subgroup = str_replace('/', '', $mime_subgroup);
}
$mime_pattern = "{$mime_group}/{$mime_subgroup}";
} else {
$mime_pattern = preg_replace('/[^-*.a-zA-Z0-9]/', '', $mime_type);
if (!str_contains($mime_pattern, '*')) {
$mime_pattern .= '/*';
}
}
$mime_pattern = preg_replace('/\*+/', '%', $mime_pattern);
if (in_array($mime_type, $wildcards, true)) {
return '';
}
if (str_contains($mime_pattern, '%')) {
$wheres[] = empty($table_alias) ? "post_mime_type LIKE '{$mime_pattern}'" : "{$table_alias}.post_mime_type LIKE '{$mime_pattern}'";
} else {
$wheres[] = empty($table_alias) ? "post_mime_type = '{$mime_pattern}'" : "{$table_alias}.post_mime_type = '{$mime_pattern}'";
}
}
if (!empty($wheres)) {
$where = ' AND (' . implode(' OR ', $wheres) . ') ';
}
return $where;
}