如何从wp_Query中排除所有图像?

时间:2015-11-24 作者:SinisterBeard

我想查询附件并排除所有图像。

我可以使用\'post_mime_type\' => \'image/*\', 但我找不到任何相反的方法。是否有任何mime\\u类型等效于posts__not_in?

3 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

基本上,解决方案是包括除图像以外的所有MIME。WordPress有一个漂亮的小功能,它保存了所有被接受的mime类型,称为get_allowed_mime_types() (名称巧妙)返回一个MIME数组()。我们所需要做的就是获取返回的数组和查询中不需要的mime类型数组之间的差异:

$unsupported_mimes  = array( \'image/jpeg\', \'image/gif\', \'image/png\', \'image/bmp\', \'image/tiff\', \'image/x-icon\' );
$all_mimes          = get_allowed_mime_types();
$accepted_mimes     = array_diff( $all_mimes, $unsupported_mimes );
$attachment_query   = new WP_Query( array(
    \'post_type\'         => \'attachment\',
    \'post_status\'       => \'inherit\',
    \'post_mime_type\'    => $accepted_mimes,
    \'posts_per_page\'    => 20,
) );

SO网友:SinisterBeard

如果您还想包含除附件(例如,帖子、页面)以外的没有任何mime类型的帖子类型,则必须使用posts_where 过滤器:

add_filter( \'posts_where\' , \'remove_images\' );

function remove_images($where) {
    global $wpdb;
    $where.=\' AND \'.$wpdb->posts.\'.post_mime_type NOT LIKE \\\'image/%\\\'\';
    return $where;
}

SO网友:Nicolai Grossherr

我很确定没有posts_not_in 对于mime类型。

当然,您可以查询作为图像的所有附件。最好只是通过参数返回IDfields 设置为ids. 然后您可以将这些ID用于posts__not_in 在第二个查询中。缺点是您需要两个查询。

另一种可能性是posts_where 过滤并应用一些SQL以获得您想要的结果。

相关推荐

Use wget to find used images

我正在寻找方法来清理一个站点的图像目录,该站点已经被未使用的图像和缩略图超载。是否可以使用wget只下载站点上html页面引用的图像?我注意到可以浏览下载文件夹并查看列出的文件,所以我假设直接的wget-r将下载这些文件。如何使用wget,但不包括对上传目录进行爬网?