Wordpress:通过 'category' 分类法获取图像

Wordpress: Getting images by 'category' taxonomy

我有以下代码,我正在尝试按类别获取图像,我有一个类别名称 "home-hero",当我将其添加到以下代码中时,它仍会显示媒体中的所有图像。

如何让它只显示home-hero下的所有图片?

<?php
function get_images_from_media_library() {
  $args = array(
    'taxonomy' => 'home-hero',
    'post_type' => 'attachment',
    'post_mime_type' =>'image',
    'post_status' => 'inherit',
    'order'    => 'DESC'
  );
  $query_images = new WP_Query( $args );
  return $query_images;
}

function display_images_from_media_library() {
  $imgs = get_images_from_media_library();
  $html = '<div id="media-gallery">';
  global $post;
  if ($imgs->have_posts()) {
    while($imgs->have_posts()) {
      $imgs->the_post();
      $html .= '<img src="' . $post->guid . '" alt="" />';
      $html .=  get_the_date('F j, Y');
    }
  }
  $html .= '</div>';
  return $html;
}
echo display_images_from_media_library();
?>

感谢您抽空准备。

你可以这样:

<?php
$images = get_posts( array('post_type' => 'attachment', 'category__in' => array(cat_ids))  );
if ( !empty($images) ) {
    foreach ( $images as $image ) {
        echo wp_get_attachment_image($image->ID).'<br />';
        echo $image->post_title .'<br />';
        the_attachment_link( $image->ID, true );
    }
}
?>

希望这对您有所帮助...

正如我在评论中所说,我有一个工作不完整的解决方案,我需要为一个项目完成。

问题是,附件没有类别,只有它们的父级有,所以不可能通过简单的查询从特定类别中获取附件

你需要在这里 运行 两个查询,第一个查询将获取给定类别的所有父 post,第二个查询将使用父 post ID从给定

的所有父 post 获取附件

在这两个查询中,您只需要获取 post ID 字段,这将大大加快您的查询速度,并且您将使用返回的附件 ID ($attachments->posts) 和 wp_get_attachment_image()

关于代码的一些注释

  • 这段代码是为了进入一个函数,$post_type$taxonomy$term 应该是动态检索的。您可以将值硬编码为这三个变量,也可以在您的函数中使其动态化

  • 您不需要使用 tax_query,如果您使用内置分类法 category,则只需使用类别参数即可。我只是使用了 tax_query 以便未来的功能可以用于任何分类。如果您为内置类别保留 tax_query,请记住,分类法是 category,术语将是类别 ID(我已将字段设置为 term_id

  • 此代码至少需要 PHP 5.4。如果您的版本早于 5.4,只需将数组包装器 [] 更改为 array()

代码如下:

$args1 = [
    'posts_per_page' => -1,
    'fields'         => 'ids',
    'post_type'      => $post_type,
    'tax_query' => [
        [
            'taxonomy'          => $taxonomy,
            'field'             => 'term_id',
            'terms'             => $term,
            'include_children'  => false
        ],
    ],  
];
$post_parents = new WP_Query($args1); 

if( $post_parents->posts ) {    

    $args = [
        'post_type'      => 'attachment',
        'post_mime_type' => 'image',
        'post_status'    => 'inherit',
        'fields'         => 'ids',
        'posts__in'      => $post_parents->posts,
    ];
    $attachments = new WP_Query($args); 

}
?><pre><?php var_dump($attachments->posts); ?></pre><?php

希望这对您的项目有所帮助